templates/todo/api/csharp-sql-func/ListsRepository.cs (80 lines of code) (raw):
using Microsoft.EntityFrameworkCore;
namespace SimpleTodo.Api;
public class ListsRepository
{
private readonly TodoDb _db;
public ListsRepository(TodoDb db)
{
_db = db;
}
public async Task<IEnumerable<TodoList>> GetListsAsync(int? skip, int? batchSize)
{
return await ToListAsync(_db.Lists, skip, batchSize);
}
public async Task<TodoList?> GetListAsync(Guid listId)
{
return await _db.Lists.SingleOrDefaultAsync(list => list.Id == listId);
}
public async Task DeleteListAsync(Guid listId)
{
var list = await GetListAsync(listId);
if (list != null)
{
_db.Lists.Remove(list);
}
await _db.SaveChangesAsync();
}
public async Task AddListAsync(TodoList list)
{
_db.Lists.Add(list);
await _db.SaveChangesAsync();
}
public async Task SaveChangesAsync()
{
await _db.SaveChangesAsync();
}
public async Task<IEnumerable<TodoItem>> GetListItemsAsync(Guid listId, int? skip, int? batchSize)
{
return await ToListAsync(
_db.Items.Where(i => i.ListId == listId),
skip,
batchSize);
}
public async Task<IEnumerable<TodoItem>> GetListItemsByStateAsync(Guid listId, string state, int? skip, int? batchSize)
{
return await ToListAsync(
_db.Items.Where(i => i.ListId == listId && i.State == state),
skip,
batchSize);
}
public async Task AddListItemAsync(TodoItem item)
{
_db.Items.Add(item);
await _db.SaveChangesAsync();
}
public async Task<TodoItem?> GetListItemAsync(Guid listId, Guid itemId)
{
return await _db.Items.SingleOrDefaultAsync(item => item.Id == itemId && item.ListId == listId);
}
public async Task DeleteListItemAsync(Guid listId, Guid itemId)
{
var list = await GetListItemAsync(listId, itemId);
if (list != null)
{
_db.Items.Remove(list);
}
await _db.SaveChangesAsync();
}
private async Task<List<T>> ToListAsync<T>(IQueryable<T> queryable, int? skip, int? batchSize)
{
if (skip != null)
{
queryable = queryable.Skip(skip.Value);
}
if (batchSize != null)
{
queryable = queryable.Take(batchSize.Value);
}
return await queryable.ToListAsync();
}
}