using Marco.Pms.DataAccess.Data; using Marco.Pms.Model.Dtos.Activities; using Marco.Pms.Model.Entitlements; using Marco.Pms.Model.Mapper; using Marco.Pms.Model.Utilities; using MarcoBMS.Services.Helpers; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; namespace Marco.Pms.Services.Controllers { [Authorize] [Route("api/[controller]")] [ApiController] public class MasterController : ControllerBase { private readonly ApplicationDbContext _context; private readonly UserHelper _userHelper; public MasterController(ApplicationDbContext context,UserHelper userHelper) { _context = context; _userHelper = userHelper; } [HttpGet] [Route("activities")] public async Task GetActivitiesMaster() { var tenantId = _userHelper.GetTenantId(); var activities = await _context.ActivityMasters.Where(c => c.TenantId == tenantId).ToListAsync(); return Ok(ApiResponse.SuccessResponse(activities, "Success.", 200)); } [HttpPost("activity")] public async Task CreateActivity([FromBody] CreateActivityMasterDto createActivity) { var tenantId = _userHelper.GetTenantId(); var employee = await _userHelper.GetCurrentEmployeeAsync(); if(employee.TenantId != tenantId) { return Unauthorized(ApiResponse.ErrorResponse("Current tenant did not match with user's tenant", "Current tenant did not match with user's tenant",401)); } var activityMaster = createActivity.ToActivityMasterFromCreateActivityMasterDto(tenantId); _context.ActivityMasters.Add(activityMaster); await _context.SaveChangesAsync(); return Ok(ApiResponse.SuccessResponse(activityMaster, "Activity created successfully", 200)); } [HttpPost("edit{id}")] public async Task UpdateActivity(int id, [FromBody] CreateActivityMasterDto createActivity) { var tenantId = _userHelper.GetTenantId(); var employee = await _userHelper.GetCurrentEmployeeAsync(); ActivityMaster? activity = await _context.ActivityMasters.FirstOrDefaultAsync(x => x.Id == id); if (activity != null) { activity.ActivityName = activity.ActivityName; activity.UnitOfMeasurement = createActivity.UnitOfMeasurement; activity.TenantId = tenantId; await _context.SaveChangesAsync(); return Ok(ApiResponse.SuccessResponse(activity, "Activity updated successfully", 200)); } return NotFound(ApiResponse.ErrorResponse("Activity no found", "Activity no found", 404)); } } }