/
AMachine
/
MMDB_Backend
Обзор
Документация
Войти
/
AMachine
/
MMDB_Backend
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
MMDB.Data/Repositories/NotesRepository.cs
96 строк
3 KB
AssaultMachine
готово короче
22 май 2025, 17:37
22 май 2025, 17:37
e81a9bb
Код
Авторство
О чём код?
using AutoMapper; using Microsoft.EntityFrameworkCore; using MMDB.Core.Abstract.Repositories; using MMDB.Core.Models; using MMDB.Core.FilterParameters; using MMDB.Data.Entities.SS13; using MMDB.Data.Extensions; namespace MMDB.Data.Repositories; public class NotesRepository(SS13DbContext context, IMapper mapper) : INotesRepository { public IReadOnlyCollection<string> NoteTypes = ["note", "watchlist entry"]; public IReadOnlyCollection<string> NoteSeverities = ["high", "medium", "minor", "none"]; public async Task<(List<Note> Notes, int Count)> GetAllAsync(NoteParameters parameters) { var filteredNotes = context.Messages .AsNoTracking() .Filter(parameters); var result = await filteredNotes .Skip(parameters.Page * parameters.PageSize) .Take(parameters.PageSize) .Select(n => mapper.Map<Note>(n)) .ToListAsync(); return (result, await filteredNotes.CountAsync()); } public async Task<Note?> GetByIdAsync(uint id) { var messageEntity = await context.Messages.AsNoTracking().FirstOrDefaultAsync(x => x.Id == id); return messageEntity is not null ? mapper.Map<Note>(messageEntity) : null; } public async Task<bool> CreateAsync(Note note) { var noteEntity = mapper.Map<MessageEntity>(note); if (!NoteSeverities.Contains(noteEntity.Severity) || !NoteTypes.Contains(noteEntity.Type)) return false; await context.Messages.AddAsync(noteEntity); await context.SaveChangesAsync(); return true; } public async Task<bool> UpdateAsync(Note note) { var noteEntity = mapper.Map<MessageEntity>(note); if (!NoteSeverities.Contains(noteEntity.Severity) || !NoteTypes.Contains(noteEntity.Type)) return false; var result = await context.Messages .Where(n => n.Id == note.Id) .ExecuteUpdateAsync(n => n .SetProperty(n => n.Severity, note.Severity) .SetProperty(n => n.Type, note.Type) .SetProperty(n => n.Text, note.Text) .SetProperty(n => n.Secret, note.IsSecret ? 1 : 0) .SetProperty(n => n.ExpireTimestamp, note.ExpireTimestamp)) != 0; await context.SaveChangesAsync(); return result; } public async Task<bool> DeleteAsync(Note note) { if (note.DeletedCkey is null) return false; var result = await context.Messages .Where(n => n.Id == note.Id) .ExecuteUpdateAsync(n => n .SetProperty(n => n.Deleted, 1) .SetProperty(n => n.DeletedCkey, note.DeletedCkey)) != 0; await context.SaveChangesAsync(); return result; } public IReadOnlyCollection<string> GetNoteTypes() { return NoteTypes; } public IReadOnlyCollection<string> GetNoteSeverities() { return NoteSeverities; } }