added advertising
This commit is contained in:
@@ -0,0 +1,82 @@
|
||||
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);
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user