Skip to content

Commit

Permalink
add favourites
Browse files Browse the repository at this point in the history
  • Loading branch information
Fagorym committed Nov 13, 2023
1 parent 9351c5c commit 9934d5e
Show file tree
Hide file tree
Showing 8 changed files with 147 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package ru.nsu.fit.directors.userservice.controller;

import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import ru.nsu.fit.directors.userservice.dto.request.RequestGetEstablishmentParameters;
import ru.nsu.fit.directors.userservice.dto.response.EstablishmentListDto;
import ru.nsu.fit.directors.userservice.service.EstablishmentService;

@RestController
@RequiredArgsConstructor
@RequestMapping(value = "/user/establishments")
@Validated
public class EstablishmentController {
private final EstablishmentService establishmentService;
/**
* Get requests for establishments.
* Can filter establishments by fields, also implemented sorting and pagination.
*
* @param parameters - list of get parameters for establishments
* @return list of establishment dto, list size included.
*/
@GetMapping(value = "all")
public EstablishmentListDto getEstablishments(@Valid RequestGetEstablishmentParameters parameters) {
return establishmentService.getEstablishmentByParams(parameters);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package ru.nsu.fit.directors.userservice.dto.request;

import jakarta.validation.constraints.Max;
import jakarta.validation.constraints.Min;
import lombok.Builder;
import org.springframework.lang.Nullable;


@Builder
public record RequestGetEstablishmentParameters(
String name,
@Nullable String category,
@Nullable Boolean hasMap,
@Nullable Boolean hasCardPayment,
@Min(value = 5, message = "Не может быть меньше 5 рабочих дней.")
@Max(value = 7, message = "Не может быть больше 7 рабочих дней.")
Integer workingDayCount,
@Min(value = 0, message = "Страница не может быть меньше нулевой.") Integer offset,
@Min(value = 1, message = "Лимит не может быть меньше единицы.") Integer limit,
String sortValue
) {

public RequestGetEstablishmentParameters {
name = name == null ? "" : name;
offset = offset == null ? 0 : offset;
limit = limit == null ? 100 : limit;
sortValue = sortValue == null ? "name" : sortValue;
workingDayCount = workingDayCount == null ? 7 : workingDayCount;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package ru.nsu.fit.directors.userservice.dto.response;

import java.util.List;

public record EstablishmentListDto(
int count,
List<ResponseBasicEstablishmentInfo> establishmentInfoList
) {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package ru.nsu.fit.directors.userservice.dto.response;

import lombok.Data;

@Data
public class ResponseBasicEstablishmentInfo {
private Long id;
private String name;
private String category;
private Float rating;
private String address;
private String image;
private Boolean hasMap;
private Boolean hasCardPayment;
private String starsCount;
private String cuisineCountry;
private boolean isFavourite;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package ru.nsu.fit.directors.userservice.service;

import ru.nsu.fit.directors.userservice.dto.request.RequestGetEstablishmentParameters;
import ru.nsu.fit.directors.userservice.dto.response.EstablishmentListDto;

public interface EstablishmentService {
EstablishmentListDto getEstablishmentByParams(RequestGetEstablishmentParameters parameters);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package ru.nsu.fit.directors.userservice.service;

import lombok.RequiredArgsConstructor;
import org.springframework.core.ParameterizedTypeReference;
import org.springframework.stereotype.Component;
import ru.nsu.fit.directors.userservice.api.EstablishmentApi;
import ru.nsu.fit.directors.userservice.dto.request.RequestGetEstablishmentParameters;
import ru.nsu.fit.directors.userservice.dto.response.EstablishmentListDto;
import ru.nsu.fit.directors.userservice.dto.response.ResponseBasicEstablishmentInfo;

import javax.annotation.ParametersAreNonnullByDefault;
import java.util.List;

@Component
@RequiredArgsConstructor
@ParametersAreNonnullByDefault
public class EstablishmentServiceImpl implements EstablishmentService {
private final EstablishmentApi establishmentApi;
private final FavouritesService favouritesService;

@Override
public EstablishmentListDto getEstablishmentByParams(RequestGetEstablishmentParameters parameters) {
List<ResponseBasicEstablishmentInfo> establishmentInfoList = establishmentApi.syncListGetWithParams(
uriBuilder -> uriBuilder.path("/establishment/all")
.queryParam("name", parameters.name())
.queryParam("hasMap", parameters.hasMap())
.queryParam("hasCardPayment", parameters.hasCardPayment())
.queryParam("category", parameters.category())
.build(),
new ParameterizedTypeReference<>() {
});
establishmentInfoList.forEach(
info -> info.setFavourite(favouritesService.getFavouritesIds().contains(info.getId()))
);
return new EstablishmentListDto(establishmentInfoList.size(), establishmentInfoList);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,4 +12,6 @@ public interface FavouritesService {
void deleteFromFavourites(Long establishmentId);

List<CompanyDto> getFavourites();

List<Long> getFavouritesIds();
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
import ru.nsu.fit.directors.userservice.repository.UserRepository;

import javax.annotation.ParametersAreNonnullByDefault;
import java.util.Collections;
import java.util.List;

@RequiredArgsConstructor
Expand Down Expand Up @@ -46,4 +47,16 @@ public List<CompanyDto> getFavourites() {
User loggedUser = securityService.getLoggedInUser();
return companyService.getCompaniesByIds(loggedUser.getFavourites().stream().map(Company::getId).toList());
}

@Override
public List<Long> getFavouritesIds() {
try {
User loggedUser = securityService.getLoggedInUser();
return loggedUser.getFavourites().stream().map(Company::getId).toList();
} catch (Exception ex) {
return Collections.emptyList();
}
}


}

0 comments on commit 9934d5e

Please sign in to comment.