DONE: add customer pages, implement auth on teller page

This commit is contained in:
ISMAIL MASSERAN
2026-07-21 10:24:14 +08:00
parent 3189e3a1e3
commit a671f7ad5c
48 changed files with 5627 additions and 273 deletions
@@ -10,7 +10,6 @@ import ba.unsa.etf.si.bbqms.ticket_service.api.TicketService;
import ba.unsa.etf.si.bbqms.ws.models.DisplayDto;
import ba.unsa.etf.si.bbqms.ws.models.ErrorResponseDto;
import ba.unsa.etf.si.bbqms.ws.models.ServiceDto;
import ba.unsa.etf.si.bbqms.ws.models.ServiceResponseDto;
import ba.unsa.etf.si.bbqms.ws.models.TicketDto;
import org.springframework.http.ResponseEntity;
import org.springframework.security.access.prepost.PreAuthorize;
@@ -28,8 +27,8 @@ public class TellerStationController {
private final TicketService ticketService;
public TellerStationController(final StationService stationService,
final AuthService authService,
final TicketService ticketService) {
final AuthService authService,
final TicketService ticketService) {
this.stationService = stationService;
this.authService = authService;
this.ticketService = ticketService;
@@ -37,7 +36,7 @@ public class TellerStationController {
@GetMapping("/{tenantCode}")
@PreAuthorize("hasAnyRole('ROLE_SUPER_ADMIN', 'ROLE_BRANCH_ADMIN')")
public ResponseEntity getAll(@PathVariable final String tenantCode){
public ResponseEntity getAll(@PathVariable final String tenantCode) {
if (!this.authService.canChangeTenant(tenantCode)) {
return ResponseEntity.badRequest().build();
}
@@ -56,43 +55,45 @@ public class TellerStationController {
@GetMapping("/{tenantCode}/{stationId}/services")
@PreAuthorize("hasAnyRole('ROLE_SUPER_ADMIN', 'ROLE_BRANCH_ADMIN')")
public ResponseEntity getServices(@PathVariable final String tenantCode,
@PathVariable final String stationId,
@RequestParam(defaultValue = "true") final boolean assigned) {
@PathVariable final String stationId,
@RequestParam(defaultValue = "true") final boolean assigned) {
if (!this.authService.canChangeTenant(tenantCode)) {
return ResponseEntity.badRequest().build();
}
try {
final Set<Service> serviceSet = this.stationService.getServicesByAssigned(Long.parseLong(stationId),assigned);
final Set<ServiceResponseDto> serviceResponseDtoSet = serviceSet.stream()
.map(ServiceResponseDto::fromEntity)
final Set<Service> serviceSet = this.stationService.getServicesByAssigned(Long.parseLong(stationId),
assigned);
final Set<ServiceDto> serviceDtoSet = serviceSet.stream()
.map(ServiceDto::fromEntity)
.collect(Collectors.toSet());
return ResponseEntity.ok().body(serviceResponseDtoSet);
}
catch (final Exception e) {
return ResponseEntity.ok().body(serviceDtoSet);
} catch (final Exception e) {
return ResponseEntity.badRequest().body(new ErrorResponseDto(e.getMessage()));
}
}
@GetMapping("/{tenantCode}/{stationId}/services/assignable")
public ResponseEntity findAssignableServices(@PathVariable final String stationId,
@PathVariable final String tenantCode) {
@PathVariable final String tenantCode) {
return ResponseEntity.ok().body(
this.stationService.findAssignableServices(Long.parseLong(stationId))
);
this.stationService.findAssignableServices(Long.parseLong(stationId)).stream()
.map(ServiceDto::fromEntity)
.collect(Collectors.toList()));
}
@PutMapping("/{tenantCode}/{stationId}/services/{serviceId}")
@PreAuthorize("hasAnyRole('ROLE_SUPER_ADMIN', 'ROLE_BRANCH_ADMIN')")
public ResponseEntity addTellerStationService(@PathVariable final String tenantCode,
@PathVariable final String stationId,
@PathVariable final String serviceId) {
@PathVariable final String stationId,
@PathVariable final String serviceId) {
if (!this.authService.canChangeTenant(tenantCode)) {
return ResponseEntity.badRequest().build();
}
try {
final TellerStation updatedTellerStation = this.stationService.addTellerStationService(Long.parseLong(stationId), Long.parseLong(serviceId));
final TellerStation updatedTellerStation = this.stationService
.addTellerStationService(Long.parseLong(stationId), Long.parseLong(serviceId));
return ResponseEntity.ok().body(TellerStationResponseDto.fromEntity(updatedTellerStation));
} catch (Exception e) {
return ResponseEntity.badRequest().build();
@@ -102,14 +103,15 @@ public class TellerStationController {
@DeleteMapping("/{tenantCode}/{stationId}/services/{serviceId}")
@PreAuthorize("hasAnyRole('ROLE_SUPER_ADMIN', 'ROLE_BRANCH_ADMIN')")
public ResponseEntity deleteTellerStationService(@PathVariable final String tenantCode,
@PathVariable final String stationId,
@PathVariable final String serviceId) {
@PathVariable final String stationId,
@PathVariable final String serviceId) {
if (!this.authService.canChangeTenant(tenantCode)) {
return ResponseEntity.badRequest().build();
}
try {
final TellerStation updatedTellerStation = this.stationService.deleteTellerStationService(Long.parseLong(stationId), Long.parseLong(serviceId));
final TellerStation updatedTellerStation = this.stationService
.deleteTellerStationService(Long.parseLong(stationId), Long.parseLong(serviceId));
return ResponseEntity.ok().body(TellerStationResponseDto.fromEntity(updatedTellerStation));
} catch (Exception e) {
return ResponseEntity.badRequest().body(new ErrorResponseDto(e.getMessage()));
@@ -119,16 +121,17 @@ public class TellerStationController {
@PutMapping("/{tenantCode}/{stationId}/displays/{displayId}")
@PreAuthorize("hasAnyRole('ROLE_SUPER_ADMIN', 'ROLE_BRANCH_ADMIN')")
public ResponseEntity addDisplayToStation(@PathVariable final String tenantCode,
@PathVariable final String stationId,
@PathVariable final String displayId) {
@PathVariable final String stationId,
@PathVariable final String displayId) {
if (!this.authService.canChangeTenant(tenantCode)) {
return ResponseEntity.badRequest().build();
}
try {
final TellerStation updatedTellerStation = this.stationService.addTellerStationDisplay(Long.parseLong(stationId), Long.parseLong(displayId));
final TellerStation updatedTellerStation = this.stationService
.addTellerStationDisplay(Long.parseLong(stationId), Long.parseLong(displayId));
return ResponseEntity.ok().body(TellerStationResponseDto.fromEntity(updatedTellerStation));
} catch(final Exception exception) {
} catch (final Exception exception) {
return ResponseEntity.badRequest().build();
}
}
@@ -136,29 +139,29 @@ public class TellerStationController {
@DeleteMapping("/{tenantCode}/{stationId}/displays/{displayId}")
@PreAuthorize("hasAnyRole('ROLE_SUPER_ADMIN', 'ROLE_BRANCH_ADMIN')")
public ResponseEntity removeDisplayFromStation(@PathVariable final String tenantCode,
@PathVariable final String stationId,
@PathVariable final String displayId) {
@PathVariable final String stationId,
@PathVariable final String displayId) {
if (!this.authService.canChangeTenant(tenantCode)) {
return ResponseEntity.badRequest().build();
}
try {
final TellerStation updatedTellerStation = this.stationService.deleteTellerStationDisplay(Long.parseLong(stationId), Long.parseLong(displayId));
final TellerStation updatedTellerStation = this.stationService
.deleteTellerStationDisplay(Long.parseLong(stationId), Long.parseLong(displayId));
return ResponseEntity.ok().body(TellerStationResponseDto.fromEntity(updatedTellerStation));
} catch(final Exception exception) {
} catch (final Exception exception) {
return ResponseEntity.badRequest().build();
}
}
@GetMapping("/{tenantCode}/{branchId}")
public ResponseEntity getBranchStations(@PathVariable final String tenantCode,
@PathVariable final String branchId) {
try{
@PathVariable final String branchId) {
try {
return ResponseEntity.ok().body(
this.stationService.getAllByBranch(Long.parseLong(branchId)).stream()
.map(TellerStationResponseDto::fromEntity)
.toList()
);
.toList());
} catch (final Exception exception) {
return ResponseEntity.badRequest().build();
}
@@ -168,7 +171,8 @@ public class TellerStationController {
public ResponseEntity getTicketsForTellerStation(@PathVariable final long stationId) {
try {
final List<TicketDto> ticketDtos = this.ticketService.findWithStation(stationId).stream()
.filter(ticket -> ticket.getTellerStation() == null || ticket.getTellerStation().getId() == stationId)
.filter(ticket -> ticket.getTellerStation() == null
|| ticket.getTellerStation().getId() == stationId)
.map(TicketDto::fromEntity)
.toList();
@@ -178,15 +182,14 @@ public class TellerStationController {
}
}
public record TellerStationResponseDto(long id, String name, DisplayDto display, Set<ServiceResponseDto> services) {
public record TellerStationResponseDto(long id, String name, DisplayDto display, Set<ServiceDto> services) {
public static TellerStationResponseDto fromEntity(final TellerStation tellerStation) {
final Set<Service> serviceSet = tellerStation.getServices();
return new TellerStationResponseDto(
tellerStation.getId(),
tellerStation.getName(),
tellerStation.getDisplay() != null ? DisplayDto.fromEntity(tellerStation.getDisplay()) : null,
serviceSet.stream().map(ServiceResponseDto::fromEntity).collect(Collectors.toSet())
);
serviceSet.stream().map(ServiceDto::fromEntity).collect(Collectors.toSet()));
}
}
}
@@ -32,9 +32,9 @@ public class TenantController {
private final AuthService authService;
public TenantController(final TenantService tenantService,
final BranchService branchService,
final GroupService groupService,
final AuthService authService) {
final BranchService branchService,
final GroupService groupService,
final AuthService authService) {
this.tenantService = tenantService;
this.branchService = branchService;
this.groupService = groupService;
@@ -57,7 +57,8 @@ public class TenantController {
@PutMapping("/{code}")
@PreAuthorize("isAuthenticated()")
public ResponseEntity updateTenant(@PathVariable final String code, @RequestBody final TenantDto request) throws Exception {
public ResponseEntity updateTenant(@PathVariable final String code, @RequestBody final TenantDto request)
throws Exception {
if (!this.authService.canChangeTenant(code)) {
return ResponseEntity.notFound().build();
}
@@ -71,7 +72,8 @@ public class TenantController {
@PostMapping("/{code}/services")
@PreAuthorize("hasAnyRole('ROLE_BRANCH_ADMIN', 'ROLE_SUPER_ADMIN')")
public ResponseEntity addService(@PathVariable(name = "code") final String code, @RequestBody final ServiceRequestDto serviceRequestDto) {
public ResponseEntity addService(@PathVariable(name = "code") final String code,
@RequestBody final ServiceRequestDto serviceRequestDto) {
if (!this.authService.canChangeTenant(code)) {
return ResponseEntity.notFound().build();
}
@@ -92,7 +94,8 @@ public class TenantController {
}
@GetMapping("/{code}/services/group/{groupId}")
public ResponseEntity listGroupAssignableServices(@PathVariable final String code, @PathVariable final String groupId) {
public ResponseEntity listGroupAssignableServices(@PathVariable final String code,
@PathVariable final String groupId) {
final List<Service> possibleServices = this.tenantService.getAllServicesByTenant(code);
final List<Service> assignedServices = this.groupService.get(Long.parseLong(groupId))
.getServices().stream().toList();
@@ -105,8 +108,8 @@ public class TenantController {
@PutMapping("/{code}/services/{id}")
@PreAuthorize("hasAnyRole('ROLE_BRANCH_ADMIN', 'ROLE_SUPER_ADMIN')")
public ResponseEntity updateService(@PathVariable(name = "code") final String code,
@PathVariable(name = "id") final Long id,
@RequestBody final ServiceRequestDto request) {
@PathVariable(name = "id") final Long id,
@RequestBody final ServiceRequestDto request) {
if (!this.authService.canChangeTenant(code)) {
return ResponseEntity.notFound().build();
}
@@ -120,7 +123,8 @@ public class TenantController {
@DeleteMapping("/{code}/services/{id}")
@PreAuthorize("hasAnyRole('ROLE_BRANCH_ADMIN', 'ROLE_SUPER_ADMIN')")
public ResponseEntity deleteService(@PathVariable(name = "code") final String code, @PathVariable(name = "id") final Long id) {
public ResponseEntity deleteService(@PathVariable(name = "code") final String code,
@PathVariable(name = "id") final Long id) {
if (!this.authService.canChangeTenant(code)) {
return ResponseEntity.notFound().build();
}