ProjectController.java

package com.edtech.controller;

import com.edtech.dto.ProjectMemberRequestDto;
import com.edtech.dto.ProjectRequestDto;
import com.edtech.dto.ProjectResponseDto;
import com.edtech.model.User;
import com.edtech.service.ProjectService;
import java.util.List;
import java.util.UUID;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.security.core.Authentication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/** Documentação para ProjectController. */
@RestController
@RequestMapping("/api/projects")
public class ProjectController {

  private final ProjectService projectService;

  /** Documentação para o método ProjectController. */
  public ProjectController(ProjectService projectService) {
    this.projectService = projectService;
  }

  /** Documentação. */
  @PostMapping
  public ResponseEntity<ProjectResponseDto> createProject(
      @RequestBody ProjectRequestDto dto, Authentication authentication) {
    User user = (User) authentication.getPrincipal();
    return ResponseEntity.status(HttpStatus.CREATED)
        .body(projectService.createProject(dto, user.getId()));
  }

  @GetMapping
  public ResponseEntity<List<ProjectResponseDto>> listProjects(Authentication authentication) {
    User user = (User) authentication.getPrincipal();
    return ResponseEntity.ok(projectService.listProjectsByUser(user.getId()));
  }

  /** Documentação. */
  @PostMapping("/{projectId}/members")
  public ResponseEntity<Void> addMember(
      @PathVariable UUID projectId,
      @RequestBody(required = false) ProjectMemberRequestDto dto,
      Authentication authentication) {
    User authenticatedUser = (User) authentication.getPrincipal();
    projectService.addMember(projectId, dto, authenticatedUser);
    return ResponseEntity.status(HttpStatus.CREATED).build();
  }
}