UploadedFileController.java 3.7 KB
// ai/controller/UploadedFileController.java
package com.aigeo.ai.controller;

import com.aigeo.ai.entity.UploadedFile;
import com.aigeo.common.enums.FileStatus;
import com.aigeo.common.enums.FileType;
import com.aigeo.ai.service.UploadedFileService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.Optional;

@RestController
@RequestMapping("/api/uploaded-files")
public class UploadedFileController {
    
    @Autowired
    private UploadedFileService uploadedFileService;
    
    @GetMapping
    public List<UploadedFile> getAllFiles() {
        return uploadedFileService.getAllFiles();
    }
    
    @GetMapping("/{id}")
    public ResponseEntity<UploadedFile> getFileById(@PathVariable Integer id) {
        Optional<UploadedFile> file = uploadedFileService.getFileById(id);
        return file.map(ResponseEntity::ok)
                .orElse(ResponseEntity.notFound().build());
    }
    
    @GetMapping("/company/{companyId}")
    public List<UploadedFile> getFilesByCompanyId(@PathVariable Integer companyId) {
        return uploadedFileService.getFilesByCompanyId(companyId);
    }
    
    @GetMapping("/user/{userId}")
    public List<UploadedFile> getFilesByUserId(@PathVariable Integer userId) {
        return uploadedFileService.getFilesByUserId(userId);
    }
    
    @GetMapping("/company/{companyId}/user/{userId}")
    public List<UploadedFile> getFilesByCompanyIdAndUserId(@PathVariable Integer companyId, 
                                                          @PathVariable Integer userId) {
        return uploadedFileService.getFilesByCompanyIdAndUserId(companyId, userId);
    }
    
    @GetMapping("/type/{fileType}")
    public List<UploadedFile> getFilesByFileType(@PathVariable FileType fileType) {
        return uploadedFileService.getFilesByFileType(fileType);
    }
    
    @GetMapping("/status/{status}")
    public List<UploadedFile> getFilesByStatus(@PathVariable FileStatus status) {
        return uploadedFileService.getFilesByStatus(status);
    }
    
    @GetMapping("/company/{companyId}/status/{status}")
    public List<UploadedFile> getFilesByCompanyIdAndStatus(@PathVariable Integer companyId, 
                                                          @PathVariable FileStatus status) {
        return uploadedFileService.getFilesByCompanyIdAndStatus(companyId, status);
    }
    
    @PostMapping
    public UploadedFile createFile(@RequestBody UploadedFile file) {
        return uploadedFileService.saveFile(file);
    }
    
    @PutMapping("/{id}")
    public ResponseEntity<UploadedFile> updateFile(@PathVariable Integer id, 
                                                  @RequestBody UploadedFile fileDetails) {
        Optional<UploadedFile> file = uploadedFileService.getFileById(id);
        if (file.isPresent()) {
            UploadedFile updatedFile = file.get();
            updatedFile.setFileName(fileDetails.getFileName());
            updatedFile.setFilePath(fileDetails.getFilePath());
            updatedFile.setFileType(fileDetails.getFileType());
            updatedFile.setFileSize(fileDetails.getFileSize());
            updatedFile.setMimeType(fileDetails.getMimeType());
            updatedFile.setStatus(fileDetails.getStatus());
            
            UploadedFile savedFile = uploadedFileService.saveFile(updatedFile);
            return ResponseEntity.ok(savedFile);
        } else {
            return ResponseEntity.notFound().build();
        }
    }
    
    @DeleteMapping("/{id}")
    public ResponseEntity<Void> deleteFile(@PathVariable Integer id) {
        uploadedFileService.deleteFile(id);
        return ResponseEntity.noContent().build();
    }
}