148 lines
4.6 KiB
C#
148 lines
4.6 KiB
C#
using Microsoft.AspNetCore.Mvc;
|
|
using Microsoft.EntityFrameworkCore;
|
|
using OnProfNext.Server.Data;
|
|
using OnProfNext.Shared.Models;
|
|
using OnProfNext.Shared.Models.DTOs;
|
|
|
|
namespace OnProfNext.Server.Controllers
|
|
{
|
|
[ApiController]
|
|
[Route("api/[controller]")]
|
|
public class ProjectController : ControllerBase
|
|
{
|
|
private readonly AppDbContext _context;
|
|
|
|
public ProjectController(AppDbContext context)
|
|
{
|
|
_context = context;
|
|
}
|
|
|
|
//GET api/project
|
|
[HttpGet]
|
|
public async Task<ActionResult<IEnumerable<ProjectDto>>> GetProjects()
|
|
{
|
|
var projects = await _context.Set<Project>().Include(p => p.ProjectUsers).ThenInclude(pu => pu.User).ToListAsync();
|
|
|
|
var result = projects.Select(p => new ProjectDto
|
|
{
|
|
Id = p.Id,
|
|
ProjectName = p.ProjectName,
|
|
Description = p.Description,
|
|
Status = p.Status,
|
|
StartDate = p.StartDate,
|
|
EndDate = p.EndDate,
|
|
MandantId = p.MandantId,
|
|
CreatedAt = p.CreatedAt,
|
|
UpdatedAt = p.UpdatedAt,
|
|
ProjectManagers = p.ProjectUsers
|
|
.Select(pu => new UserShortDto
|
|
{
|
|
Id = pu.User.Id,
|
|
Username = pu.User.Username,
|
|
FirstName = pu.User.FirstName,
|
|
LastName = pu.User.LastName
|
|
}).ToList()
|
|
}).ToList();
|
|
|
|
return Ok(result);
|
|
}
|
|
|
|
//GET: api/project/5
|
|
[HttpGet("{id}")]
|
|
public async Task<ActionResult<Project>> GetProject(int id)
|
|
{
|
|
var project = await _context.Set<Project>().FindAsync(id);
|
|
if (project == null)
|
|
{
|
|
return NotFound();
|
|
}
|
|
return project;
|
|
}
|
|
|
|
//POST : api/project
|
|
[HttpPost]
|
|
public async Task<ActionResult<ProjectDto>> CreateProject(ProjectCreateDto dto)
|
|
{
|
|
var project = new Project
|
|
{
|
|
ProjectName = dto.ProjectName,
|
|
Description = dto.Description,
|
|
Status = dto.Status,
|
|
StartDate = dto.StartDate,
|
|
EndDate = dto.EndDate,
|
|
MandantId = dto.MandantId,
|
|
CreatedAt = DateTime.UtcNow,
|
|
UpdatedAt = DateTime.UtcNow
|
|
};
|
|
|
|
_context.Projects.Add(project);
|
|
await _context.SaveChangesAsync();
|
|
|
|
// Relationseinträge hinzufügen
|
|
foreach (var userId in dto.ProjectManagerIds)
|
|
{
|
|
_context.ProjectUsers.Add(new ProjectUser
|
|
{
|
|
ProjectId = project.Id,
|
|
UserId = userId
|
|
});
|
|
}
|
|
|
|
await _context.SaveChangesAsync();
|
|
|
|
return CreatedAtAction(nameof(GetProjects), new { id = project.Id }, dto);
|
|
}
|
|
|
|
//PUT: api/project/5
|
|
[HttpPut("{id}")]
|
|
public async Task<IActionResult> UpdateProject(int id, ProjectCreateDto dto)
|
|
{
|
|
var project = await _context.Projects
|
|
.Include(p => p.ProjectUsers)
|
|
.FirstOrDefaultAsync(p => p.Id == id);
|
|
|
|
if (project == null)
|
|
return NotFound();
|
|
|
|
// Grunddaten aktualisieren
|
|
project.ProjectName = dto.ProjectName;
|
|
project.Description = dto.Description;
|
|
project.Status = dto.Status;
|
|
project.StartDate = dto.StartDate;
|
|
project.EndDate = dto.EndDate;
|
|
project.UpdatedAt = DateTime.UtcNow;
|
|
|
|
// Projektleiter aktualisieren
|
|
project.ProjectUsers.Clear();
|
|
foreach (var userId in dto.ProjectManagerIds)
|
|
{
|
|
project.ProjectUsers.Add(new ProjectUser
|
|
{
|
|
ProjectId = project.Id,
|
|
UserId = userId
|
|
});
|
|
}
|
|
|
|
await _context.SaveChangesAsync();
|
|
return NoContent();
|
|
}
|
|
|
|
|
|
//DELETE: api/project/5
|
|
[HttpDelete("{id}")]
|
|
public async Task<IActionResult> DeleteProject(int id)
|
|
{
|
|
var project = await _context.Projects.FindAsync(id);
|
|
if (project == null)
|
|
return NotFound();
|
|
|
|
_context.Projects.Remove(project);
|
|
await _context.SaveChangesAsync();
|
|
|
|
return NoContent();
|
|
}
|
|
|
|
|
|
}
|
|
}
|