// Kyoo - A portable and vast media library solution. // Copyright (c) Kyoo. // // See AUTHORS.md and LICENSE file in the project root for full license information. // // Kyoo is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // any later version. // // Kyoo is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Kyoo. If not, see . using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using System.Threading.Tasks; using Kyoo.Abstractions.Controllers; using Kyoo.Abstractions.Models; using Kyoo.Database; using Microsoft.EntityFrameworkCore; namespace Kyoo.Core.Controllers { /// /// A repository for users. /// public class UserRepository : LocalRepository, IUserRepository { /// /// The database handle /// private readonly DatabaseContext _database; /// protected override Expression> DefaultSort => x => x.Username; /// /// Create a new /// /// The database handle to use public UserRepository(DatabaseContext database) : base(database) { _database = database; } /// public override async Task> Search(string query) { return await _database.Users .Where(_database.Like(x => x.Username, $"%{query}%")) .OrderBy(DefaultSort) .Take(20) .ToListAsync(); } /// public override async Task Create(User obj) { await base.Create(obj); _database.Entry(obj).State = EntityState.Added; await _database.SaveChangesAsync($"Trying to insert a duplicated user (slug {obj.Slug} already exists)."); return obj; } /// public override async Task Delete(User obj) { if (obj == null) throw new ArgumentNullException(nameof(obj)); _database.Entry(obj).State = EntityState.Deleted; await _database.SaveChangesAsync(); } } }