Files
nahodka-back/src/main/java/com/krylov/refound/controller/advertising/CampaignAdminController.java
2026-09-23 23:34:05 +03:00

83 lines
3.5 KiB
Java

package com.krylov.refound.controller.advertising;
import com.krylov.refound.dto.advertising.CampaignCreateRequestDto;
import com.krylov.refound.dto.advertising.CampaignResponseDto;
import com.krylov.refound.dto.advertising.CampaignStatusUpdateRequestDto;
import com.krylov.refound.dto.advertising.CampaignUpdateRequestDto;
import com.krylov.refound.service.advertising.CampaignService;
import jakarta.persistence.EntityNotFoundException;
import jakarta.validation.Valid;
import java.util.List;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PatchMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@Slf4j
@RestController
@RequestMapping("/api/v1/admin/campaigns")
@RequiredArgsConstructor
public class CampaignAdminController {
private final CampaignService campaignService;
@GetMapping
@PreAuthorize("hasRole('ADMIN')")
public ResponseEntity<List<CampaignResponseDto>> getAllCampaigns() {
List<CampaignResponseDto> campaigns = campaignService.getCampaign();
return ResponseEntity .ok(campaigns);
}
@GetMapping("/{campaignId}")
@PreAuthorize("hasRole('ADMIN')")
public ResponseEntity<CampaignResponseDto> getCampaignById(@PathVariable Long campaignId) {
log.info("getCampaignById {}", campaignId);
CampaignResponseDto campaign = campaignService.getCampaignById(campaignId)
.orElseThrow(() -> new EntityNotFoundException("Campaign not found: " + campaignId));
return ResponseEntity.ok(campaign);
}
@PostMapping
@PreAuthorize("hasRole('ADMIN')")
public ResponseEntity<CampaignResponseDto> createCampaign(@Valid @RequestBody CampaignCreateRequestDto request) {
log.info("createCampaign {}", request);
if (!request.startDate().isBefore(request.endDate())) {
return ResponseEntity.badRequest().build();
}
if (request.dailyImpressionCap() <= 0) {
return ResponseEntity.badRequest().build();
}
CampaignResponseDto campaign = campaignService.createCampaign(request);
return ResponseEntity.status(HttpStatus.CREATED).body(campaign);
}
@PutMapping("/{campaignId}")
@PreAuthorize("hasRole('ADMIN')")
public ResponseEntity<CampaignResponseDto> updateCampaign(@PathVariable Long campaignId, @Valid @RequestBody CampaignUpdateRequestDto request) {
log.info("updateCampaign {}", campaignId);
CampaignResponseDto campaign = campaignService.updateCampaign(campaignId, request);
return ResponseEntity.ok(campaign);
}
@PatchMapping("/{campaignId}/status")
@PreAuthorize("hasRole('ADMIN')")
@Transactional
public ResponseEntity<CampaignResponseDto> updateStatus(@PathVariable Long campaignId, @Valid @RequestBody CampaignStatusUpdateRequestDto request) {
log.info("updateStatus company {}", campaignId);
CampaignResponseDto campaign = campaignService.updateCampaignStatus(campaignId, request);
return ResponseEntity.ok(campaign);
}
}