# HopFrame Repositories The HopFrame provies repositories for the various build in database models as an abstraction around the `HopDbContext` to ensure, that the data is proccessed and saved correctly. ## Overview The repositories can also be used by simply defining them as a dependency in your service / controller. ### User Repository ```csharp public interface IUserRepository { Task> GetUsers(); Task GetUser(Guid userId); Task GetUserByEmail(string email); Task GetUserByUsername(string username); Task AddUser(User user); Task UpdateUser(User user); Task DeleteUser(User user); Task CheckUserPassword(User user, string password); Task ChangePassword(User user, string password); } ``` ### Group Repository ```csharp public interface IGroupRepository { Task> GetPermissionGroups(); Task> GetDefaultGroups(); Task> GetUserGroups(User user); Task GetPermissionGroup(string name); Task EditPermissionGroup(PermissionGroup group); Task CreatePermissionGroup(PermissionGroup group); Task DeletePermissionGroup(PermissionGroup group); } ``` ### Permission Repository ```csharp public interface IPermissionRepository { Task HasPermission(IPermissionOwner owner, params string[] permissions); Task AddPermission(IPermissionOwner owner, string permission); Task RemovePermission(IPermissionOwner owner, string permission); Task> GetFullPermissions(IPermissionOwner owner); } ``` ### Token Repository ```csharp public interface ITokenRepository { Task GetToken(string content); Task CreateToken(int type, User owner); Task DeleteUserTokens(User owner); Task DeleteToken(Token token); Task CreateApiToken(User owner, DateTime expirationDate); } ```