added advertising
This commit is contained in:
@@ -0,0 +1,102 @@
|
||||
package com.krylov.refound.service.advertising;
|
||||
|
||||
import com.krylov.refound.dto.advertising.AdvertisingAdminResponseDto;
|
||||
import com.krylov.refound.dto.advertising.AdvertisingCreateRequestDto;
|
||||
import com.krylov.refound.dto.advertising.AdvertisingUpdateRequestDto;
|
||||
import com.krylov.refound.dto.advertising.PresignUploadRequestDto;
|
||||
import com.krylov.refound.entity.advertising.Advertising;
|
||||
import com.krylov.refound.entity.advertising.Campaign;
|
||||
import com.krylov.refound.enums.advertising.AdvertisingType;
|
||||
import com.krylov.refound.enums.advertising.TranscodingStatus;
|
||||
import com.krylov.refound.repository.advertising.AdvertisingRepository;
|
||||
import jakarta.persistence.EntityNotFoundException;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
@Slf4j
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
public class AdvertisingAdminService {
|
||||
|
||||
private final AdvertisingRepository advertisingRepository;
|
||||
|
||||
public Advertising createAdvertising(Campaign campaign, AdvertisingCreateRequestDto request){
|
||||
Advertising advertising = new Advertising();
|
||||
advertising.setCampaign(campaign);
|
||||
advertising.setType(request.type());
|
||||
advertising.setTargetUrl(request.targetUrl());
|
||||
advertising.setWeight(request.weight());
|
||||
if (request.type() == AdvertisingType.IMAGE) {
|
||||
advertising.setMediaKey(request.mediaKey());
|
||||
advertising.setTranscodingStatus(TranscodingStatus.READY);
|
||||
} else {
|
||||
// VIDEO — media_key появится только после presign-upload → confirm-upload → транскодинга
|
||||
advertising.setMediaKey(null);
|
||||
advertising.setTranscodingStatus(TranscodingStatus.PENDING);
|
||||
}
|
||||
log.info("Advertising {} created", advertising);
|
||||
return advertising;
|
||||
}
|
||||
|
||||
public void updateTranscodingStatus(Long advertisingId){
|
||||
advertisingRepository.updateTranscodingStatus(advertisingId, TranscodingStatus.PROCESSING);
|
||||
}
|
||||
|
||||
public String getSourceKey(Long advertisingId,PresignUploadRequestDto request){
|
||||
String extensionFor = extensionFor(request.contentType());
|
||||
return "sources/%d/%s%s".formatted(advertisingId, UUID.randomUUID(), extensionFor);
|
||||
}
|
||||
|
||||
public String extensionFor(String contentType) {
|
||||
return switch (contentType) {
|
||||
case "video/quicktime" -> ".mov";
|
||||
case "video/webm" -> ".webm";
|
||||
default -> ".mp4";
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
public boolean isAllowedContentType(String contentType) {
|
||||
return contentType != null && (contentType.equals("video/mp4")
|
||||
|| contentType.equals("video/quicktime")
|
||||
|| contentType.equals("video/webm"));
|
||||
}
|
||||
|
||||
|
||||
public AdvertisingAdminResponseDto toAdminDto(Advertising advertising) {
|
||||
Advertising saved = advertisingRepository.save(advertising);
|
||||
return mapToAdminDto(saved);
|
||||
}
|
||||
|
||||
public List<AdvertisingAdminResponseDto> getAdvertisingsByCampaign(Long campaignId) {
|
||||
return advertisingRepository.findAllByCampaignIdOrderByCreatedAtDesc(campaignId)
|
||||
.stream()
|
||||
.map(this::mapToAdminDto)
|
||||
.toList();
|
||||
}
|
||||
|
||||
public AdvertisingAdminResponseDto updateAdvertising(Long advertisingId, AdvertisingUpdateRequestDto request) {
|
||||
Advertising advertising = advertisingRepository.findById(advertisingId)
|
||||
.orElseThrow(() -> new EntityNotFoundException("Advertising not found: " + advertisingId));
|
||||
advertising.setTargetUrl(request.targetUrl());
|
||||
advertising.setWeight(request.weight());
|
||||
Advertising saved = advertisingRepository.save(advertising);
|
||||
log.info("Advertising {} updated", saved.getId());
|
||||
return mapToAdminDto(saved);
|
||||
}
|
||||
|
||||
private AdvertisingAdminResponseDto mapToAdminDto(Advertising advertising) {
|
||||
return new AdvertisingAdminResponseDto(
|
||||
advertising.getId(),
|
||||
advertising.getCampaign().getId(),
|
||||
advertising.getType(),
|
||||
advertising.getTargetUrl(),
|
||||
advertising.getWeight(),
|
||||
advertising.getTranscodingStatus());
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user