Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 18 additions & 0 deletions src/main/java/com/backend/controllers/RestaurantController.java
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
package com.backend.controllers;

import com.backend.model.dtos.CreateRestaurantRequest;
import com.backend.model.dtos.RankedRestaurantDTO;
import com.backend.model.dtos.RestaurantDetailsDTO;
import com.backend.model.dtos.RestaurantListDTO;
import com.backend.model.dtos.UpdateRestaurantRequest;
import com.backend.model.entities.Restaurant;
import com.backend.services.RecommendationService;
import com.backend.services.RestaurantService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
Expand Down Expand Up @@ -42,6 +44,22 @@
public class RestaurantController {

private final RestaurantService restaurantService;
private final RecommendationService recommendationService;

@Operation(
summary = "Get all restaurants with ranks",
description = "Retrieves a list of all available restaurants in the system including user based ranking."
)
@ApiResponses(value = {
@ApiResponse(responseCode = "200", description = "Successfully retrieved the list of restaurants")
})
@GetMapping("/me/recommendation")
public ResponseEntity<List<RankedRestaurantDTO>> getAllRestaurantsWithRecommendations(
@AuthenticationPrincipal Jwt jwt) {
String userId = jwt != null ? jwt.getSubject() : null;
List<RankedRestaurantDTO> restaurants = recommendationService.getRankedRestaurants(userId);
return ResponseEntity.ok(restaurants);
}

@Operation(
summary = "Get all restaurants",
Expand Down
40 changes: 40 additions & 0 deletions src/main/java/com/backend/controllers/TagController.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
package com.backend.controllers;

import com.backend.model.dtos.TagDTO;
import com.backend.model.entities.DishTranslation;
import com.backend.model.entities.Tag;
import com.backend.services.TagService;
import io.swagger.v3.oas.annotations.Parameter;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;
import java.util.Map;

@RestController
@RequestMapping("/api/tags")
@RequiredArgsConstructor
@io.swagger.v3.oas.annotations.tags.Tag(name = "Tags", description = "Endpoints for retrieving tags")
@CrossOrigin(origins = "http://localhost:3000")
public class TagController {
private final TagService tagService;
@GetMapping
public ResponseEntity<List<TagDTO>> getAllTags(
@Parameter(description = "Language code (PL or EN)", required = false)
@RequestParam(value = "language", defaultValue = "EN") DishTranslation.Language language) {
return ResponseEntity.ok(tagService.getAllTags(language));
}

@GetMapping("/grouped")
public ResponseEntity<Map<Tag.TagType, List<TagDTO>>> getAllTagsGrouped(
@Parameter(description = "Language code (PL or EN)", required = false)
@RequestParam(value = "language", defaultValue = "EN") DishTranslation.Language language) {
return ResponseEntity.ok(tagService.getAllTagsGrouped(language));
}

}
19 changes: 19 additions & 0 deletions src/main/java/com/backend/controllers/UserController.java
Original file line number Diff line number Diff line change
@@ -1,11 +1,15 @@
package com.backend.controllers;

import com.backend.model.dtos.PreferenceRequest;
import com.backend.model.dtos.UpdatePreferencesRequest;
import com.backend.model.dtos.UserPreferenceDTO;
import com.backend.model.dtos.UserProfileDTO;
import com.backend.services.UserService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.responses.ApiResponses;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.security.core.annotation.AuthenticationPrincipal;
Expand All @@ -14,10 +18,12 @@
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.CrossOrigin;

import java.util.List;
import java.util.UUID;

@RestController
Expand Down Expand Up @@ -87,4 +93,17 @@ public ResponseEntity<Void> removeFromFavourites(
return ResponseEntity.ok().build();
}

@GetMapping
public ResponseEntity<List<UserPreferenceDTO>> getPreferences(@AuthenticationPrincipal Jwt jwt) {
return ResponseEntity.ok(userService.getPreferences(jwt));
}


@PostMapping("/preferences")
public void addPreference(
@AuthenticationPrincipal Jwt jwt,
@RequestBody @Valid UpdatePreferencesRequest request) {
userService.updatePreferences(jwt, request);
}

}
14 changes: 6 additions & 8 deletions src/main/java/com/backend/model/dtos/AIDishDTO.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package com.backend.model.dtos;

import com.backend.model.entities.Dish;
import com.backend.model.entities.Tag;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
Expand All @@ -12,16 +14,12 @@
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class AIDishDTO {
private String name;
private String category;
private BigDecimal price;
private Set<Dish.Allergens> allergens;

public AIDishDTO(Dish dish) {
this.name = dish.getName();
this.category = dish.getCategory().name();
this.price = dish.getPrice().getAmount();
this.allergens = dish.getAllergens();
}
private Set<String> allergens;
private Set<String> cuisines;
private Set<String> dietary;
}
5 changes: 3 additions & 2 deletions src/main/java/com/backend/model/dtos/DishDTO.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.backend.model.dtos;

import com.backend.model.entities.Dish;
import com.backend.model.entities.Tag;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
Expand All @@ -17,13 +18,13 @@ public class DishDTO {
private String name;
private String category;
private BigDecimal price;
private Set<Dish.Allergens> allergens;
private Set<Tag> tags;

public DishDTO(Dish dish) {
this.id = dish.getId();
this.name = dish.getName();
this.category = dish.getCategory().name();
this.price = dish.getPrice().getAmount();
this.allergens = dish.getAllergens();
this.tags = dish.getTags();
}
}
2 changes: 2 additions & 0 deletions src/main/java/com/backend/model/dtos/LocalizedDishDTO.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,13 @@
import lombok.Getter;

import java.math.BigDecimal;
import java.util.Set;

@Getter
@AllArgsConstructor
public class LocalizedDishDTO {
private DishDTO dish;
private String displayName;
private BigDecimal price;
private Set<TagDTO> tags;
}
11 changes: 11 additions & 0 deletions src/main/java/com/backend/model/dtos/PreferenceRequest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package com.backend.model.dtos;

import com.backend.model.entities.Tag;
import com.backend.model.entities.UserPreference;
import jakarta.validation.constraints.NotNull;

public record PreferenceRequest(
@NotNull Tag.TagValue tagValue,
@NotNull UserPreference.PreferenceType preferenceType
) {}

8 changes: 8 additions & 0 deletions src/main/java/com/backend/model/dtos/RankedRestaurantDTO.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package com.backend.model.dtos;

import java.util.List;

public record RankedRestaurantDTO (
RestaurantListDTO restaurant,
double score){
}
21 changes: 21 additions & 0 deletions src/main/java/com/backend/model/dtos/TagDTO.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package com.backend.model.dtos;

import com.backend.model.entities.DishTranslation;
import com.backend.model.entities.Tag;
import com.backend.model.entities.Tag.TagType;
import com.backend.model.entities.Tag.TagValue;

public record TagDTO(
TagValue value,
TagType tagType,
String label
) {
public static TagDTO from(Tag tag, DishTranslation.Language language) {
return new TagDTO(
tag.getValue(),
tag.getTagType(),
tag.getValue().getLabel(language)
);
}
}

10 changes: 10 additions & 0 deletions src/main/java/com/backend/model/dtos/UpdatePreferencesRequest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package com.backend.model.dtos;

import jakarta.validation.Valid;
import jakarta.validation.constraints.NotNull;

import java.util.List;

public record UpdatePreferencesRequest(
@NotNull @Valid List<PreferenceRequest> preferences
) {}
18 changes: 18 additions & 0 deletions src/main/java/com/backend/model/dtos/UserPreferenceDTO.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package com.backend.model.dtos;

import com.backend.model.entities.Tag;
import com.backend.model.entities.UserPreference;

public record UserPreferenceDTO(
Tag.TagValue tagValue,
Tag.TagType tagType,
UserPreference.PreferenceType preferenceType
) {
public static UserPreferenceDTO from(UserPreference preference) {
return new UserPreferenceDTO(
preference.getTag().getValue(),
preference.getTag().getTagType(),
preference.getPreferenceType()
);
}
}
19 changes: 10 additions & 9 deletions src/main/java/com/backend/model/entities/Dish.java
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.JoinTable;
import jakarta.persistence.ManyToMany;
import jakarta.persistence.ManyToOne;
import jakarta.persistence.Table;
Expand All @@ -19,6 +21,7 @@
import lombok.Setter;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.UUID;
Expand All @@ -39,11 +42,13 @@ public class Dish {
private Price price;


@ElementCollection(targetClass = Allergens.class)
@Enumerated(EnumType.STRING)
@CollectionTable(name = "dish_allergens")
@Column(name = "allergen")
private Set<Allergens> allergens;
@ManyToMany
@JoinTable(
name = "dish_tags",
joinColumns = @JoinColumn(name = "dish_id"),
inverseJoinColumns = @JoinColumn(name = "tag_id")
)
private Set<Tag> tags = new HashSet<>();

@ManyToOne
private Restaurant restaurant;
Expand All @@ -54,8 +59,4 @@ public class Dish {
public enum Category {
SOUP, MAIN_COURSE
}

public enum Allergens {
NUTS, GLUTEN, MEAT, LACTOSE, SESAME
}
}
6 changes: 4 additions & 2 deletions src/main/java/com/backend/model/entities/Restaurant.java
Original file line number Diff line number Diff line change
Expand Up @@ -33,11 +33,13 @@
public class Restaurant extends Facility {
private String name;
@OneToMany(mappedBy = "restaurant", cascade = CascadeType.ALL, orphanRemoval = true)
private List<OpeningHours> openingHours;
private List<OpeningHours> openingHours = new ArrayList<>();

@OneToMany(mappedBy = "restaurant", cascade = CascadeType.ALL)
private List<Dish> dishes = new ArrayList<>();

@OneToMany(mappedBy = "restaurant", cascade = CascadeType.ALL)
private List<DailyMenu> dailyMenus = new ArrayList<>();
private Set<DailyMenu> dailyMenus = new HashSet<>();
@ManyToMany
@JoinTable(
name = "restaurant_owners",
Expand Down
Loading
Loading