dev #9

Merged
mfnefd merged 77 commits from dev into main 2024-12-25 23:49:45 +04:00
4 changed files with 129 additions and 130 deletions
Showing only changes of commit 03302065ab - Show all commits

View File

@ -6,123 +6,123 @@ using Microsoft.EntityFrameworkCore;
namespace Cloud.Controllers namespace Cloud.Controllers
{ {
[Authorize] [Authorize]
[ApiController] [ApiController]
[Route("api/user")] [Route("api/user")]
public class FarmController : ControllerBase public class FarmController : ControllerBase
{ {
private IConfiguration _config; private IConfiguration _config;
private ApplicationContext _context; private ApplicationContext _context;
public FarmController(IConfiguration config, ApplicationContext context) public FarmController(IConfiguration config, ApplicationContext context)
{ {
_config = config; _config = config;
_context = context; _context = context;
} }
[HttpGet("{userId}/farm")] [HttpGet("{userId}/farm")]
public async Task<ActionResult<List<Farm>>> Index (int userId) public async Task<ActionResult<List<Farm>>> Index(int userId)
{ {
try try
{ {
List<Farm> farms = await List<Farm> farms = await
_context.Farms.Where(x => x.UserId == userId).AsNoTracking().ToListAsync(); _context.Farms.Where(x => x.UserId == userId).AsNoTracking().ToListAsync();
if (!farms.Any()) if (!farms.Any())
return NotFound("Farms is not found"); return NotFound("Farms is not found");
return Ok(farms); return Ok(farms);
} }
catch (Exception ex) catch (Exception ex)
{ {
return BadRequest(ex.Message); return BadRequest(ex.Message);
} }
} }
[HttpGet("{userId}/farm/{farmId}")] [HttpGet("{userId}/farm/{farmId}")]
public async Task<ActionResult<Farm>> Show(int userId, int farmId) public async Task<ActionResult<Farm>> Show(int userId, int farmId)
{ {
try try
{ {
Farm? farm = await Farm? farm = await
_context.Farms.FirstOrDefaultAsync(x => x.UserId == userId && x.Id == farmId); _context.Farms.FirstOrDefaultAsync(x => x.UserId == userId && x.Id == farmId);
if (farm == null) if (farm == null)
return NotFound("Farm is not found"); return NotFound("Farm is not found");
return Ok(farm); return Ok(farm);
} }
catch (Exception ex) catch (Exception ex)
{ {
return BadRequest(ex.Message); return BadRequest(ex.Message);
} }
} }
[HttpPost("{userId}/farm")] [HttpPost("{userId}/farm")]
public async Task<ActionResult<Farm>> Create([FromBody] FarmRequest farmRequest, int userId) public async Task<ActionResult<Farm>> Create([FromBody] FarmRequest farmRequest, int userId)
{ {
try try
{ {
var farm = new Farm { var farm = new Farm
Name = farmRequest.Name, {
UserId = userId, Name = farmRequest.Name,
RaspberryMacAddr = farmRequest.RaspberryMacAddr, UserId = userId,
}; RaspberryIP = farmRequest.RaspberryIP,
};
Farm? farmCreated = _context.Farms.Add(farm).Entity; Farm? farmCreated = _context.Farms.Add(farm).Entity;
await _context.SaveChangesAsync(); await _context.SaveChangesAsync();
return Ok(farmCreated); return Ok(farmCreated);
} }
catch (Exception ex) catch (Exception ex)
{ {
return BadRequest(ex.Message); return BadRequest(ex.Message);
} }
} }
[HttpPut("{userId}/farm/{farmId}")] [HttpPut("{userId}/farm/{farmId}")]
public async Task<ActionResult<Farm>> Update([FromBody] FarmRequest farmRequest, int userId, int farmId) public async Task<ActionResult<Farm>> Update([FromBody] FarmRequest farmRequest, int userId, int farmId)
{ {
try try
{ {
Farm? farm = await _context.Farms.FirstOrDefaultAsync(x => x.Id == farmId && x.UserId == userId); Farm? farm = await _context.Farms.FirstOrDefaultAsync(x => x.Id == farmId && x.UserId == userId);
if (farm == null) if (farm == null)
return NotFound("Farm is not found"); return NotFound("Farm is not found");
farm.Name = farmRequest.Name; farm.Name = farmRequest.Name;
farm.RaspberryMacAddr = farmRequest.RaspberryMacAddr; farm.RaspberryIP = farmRequest.RaspberryIP;
_context.Farms.Update(farm); _context.Farms.Update(farm);
await _context.SaveChangesAsync(); await _context.SaveChangesAsync();
return Ok(farm); return Ok(farm);
} }
catch (Exception ex) catch (Exception ex)
{ {
return BadRequest(ex.Message); return BadRequest(ex.Message);
} }
} }
[HttpDelete("{userId}/farm/{farmId}")] [HttpDelete("{userId}/farm/{farmId}")]
public async Task<ActionResult> Delete(int userId, int farmId) public async Task<ActionResult> Delete(int userId, int farmId)
{ {
try try
{ {
Farm? farm = await _context.Farms.FirstOrDefaultAsync(x => x.Id == farmId && x.UserId == userId); Farm? farm = await _context.Farms.FirstOrDefaultAsync(x => x.Id == farmId && x.UserId == userId);
if (farm == null) if (farm == null)
return NotFound("Farm is not found"); return NotFound("Farm is not found");
_context.Farms.Remove(farm); _context.Farms.Remove(farm);
await _context.SaveChangesAsync(); await _context.SaveChangesAsync();
return Ok("Farm deleted successfully"); return Ok("Farm deleted successfully");
} }
catch (Exception ex) catch (Exception ex)
{ {
return BadRequest(ex.Message); return BadRequest(ex.Message);
} }
} }
}
} }
}

View File

@ -1,12 +1,11 @@
namespace Cloud.Models namespace Cloud.Models
{ {
public class Farm public class Farm
{ {
public int Id { get; set; } public int Id { get; set; }
public string Name { get; set; } public string Name { get; set; }
public int UserId { get; set; } public int UserId { get; set; }
public User? User { get; set; } public User? User { get; set; }
public string RaspberryMacAddr { get; set; } public string RaspberryIP { get; set; }
}
} }
}

View File

@ -1,8 +1,8 @@
namespace Cloud.Requests namespace Cloud.Requests
{ {
public class FarmRequest public class FarmRequest
{ {
public string Name { get; set; } public string Name { get; set; }
public string RaspberryMacAddr { get; set; } public string RaspberryIP { get; set; }
} }
} }

View File

@ -3,16 +3,16 @@ using FluentValidation;
namespace Cloud.Validation namespace Cloud.Validation
{ {
public class FarmValidator : AbstractValidator<FarmRequest> public class FarmValidator : AbstractValidator<FarmRequest>
{ {
public FarmValidator() public FarmValidator()
{ {
RuleFor(request => request.RaspberryMacAddr) RuleFor(request => request.RaspberryIP)
.NotEmpty().WithMessage("MAC address can't be empty") .NotEmpty().WithMessage("IP address can't be empty")
.Matches("^([0-9A-Fa-f]{2}[:-]?){5}([0-9A-Fa-f]{2})$").WithMessage("MAC address is not valid"); .Matches(@"^((25[0-5]|(2[0-4]|1\d|[1-9]|)\d)\.?\b){4}$").WithMessage("IP address is not valid");
RuleFor(request => request.Name) RuleFor(request => request.Name)
.NotEmpty().WithMessage("Name can't be empty"); .NotEmpty().WithMessage("Name can't be empty");
} }
} }
} }