/
n1kolas
/
VendAPI
Обзор
Документация
Войти
/
n1kolas
/
VendAPI
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
Controllers/GenericController.cs
101 строка
3 KB
Nicolai
Initial commit
08 дек 2025, 08:28
08 дек 2025, 08:28
6a49801
Код
Авторство
О чём код?
using DBEntitites.Data; using DBEntitites.Entities; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; using System.Linq; namespace VMSAPI.Controllers { [Route("api/[controller]")] [ApiController] public class GenericController<TEntity> : ControllerBase where TEntity : class, IEntity { protected readonly DbContext _context; protected readonly DbSet<TEntity> _dbSet; public GenericController(VendingDbContext context) { _context = context; _dbSet = context.Set<TEntity>(); } [HttpGet] public virtual async Task<ActionResult<IEnumerable<TEntity>>> Get( [FromQuery] int? page = null, [FromQuery] int? pageSize = null) { if(!page.HasValue && !pageSize.HasValue) { var res = await _dbSet.ToListAsync(); return Ok(res); } if (!page.HasValue && pageSize.HasValue || page.HasValue && !pageSize.HasValue) { return BadRequest(); } int pageValue = page ?? 1; int pageSizeValue = pageSize ?? 10; int skipAmount = (pageValue - 1) * pageSizeValue; var entities = await _dbSet .OrderBy(e => e.Id) .Skip(skipAmount) .Take(pageSizeValue) .ToListAsync(); return Ok(entities); } [HttpGet("{id}")] public virtual async Task<ActionResult<TEntity>> GetById(Guid id) { var entity = await _dbSet.FindAsync(id); if (entity == null) return NotFound(); return entity; } [HttpPost] public virtual async Task<ActionResult<TEntity>> Create([FromBody] TEntity entity) { if (entity == null) return BadRequest("Объект не может быть null"); if (await _dbSet.AnyAsync(e => e.Id == entity.Id)) return Conflict($"Объект с Id {entity.Id} уже существует"); await _dbSet.AddAsync(entity); await _context.SaveChangesAsync(); return CreatedAtAction(nameof(GetById), new { id = entity.Id }, entity); } [HttpPut("{id}")] public virtual async Task<ActionResult<TEntity>> Update(Guid id, [FromBody] TEntity entity) { if (entity == null) return BadRequest("Объект не может быть null"); if (id != entity.Id) return BadRequest("Id не совпадают."); var found = await _dbSet.FindAsync(id); if (entity == null) return NotFound(); await _context.SaveChangesAsync(); return NoContent(); } [HttpDelete("{id}")] public virtual async Task<IActionResult> Delete(Guid id) { var entity = await _dbSet.FindAsync(id); if (entity == null) return NotFound(); _dbSet.Remove(entity); await _context.SaveChangesAsync(); return NoContent(); } } }