e4091eee80
- Backend: NEW AdminController with user CRUD (GET/POST/DELETE /api/v1/admin/users)
- Backend: NEW GET /api/dashboard/tasks/{id} single task endpoint
- Backend: NEW POST /api/dashboard/tasks/{id}/activity comment endpoint
- Backend: IUserRepository + UserRepository extended with GetAllAsync, DeleteAsync
- Backend: Admin DTOs (AdminUserInfo, AdminCreateUserRequest, AdminUpdateRoleRequest)
- Frontend: NEW TaskDetailView.vue — URL-based (/tasks/:id) Galaxy-themed task detail
with subtask create/edit/delete, activity with comments, property sidebar
- Frontend: LoginView.vue — полностью Galaxy theme redesign with GalaxyBackground,
glass-morphism card, password toggle, consistent brand
- Frontend: SettingsView.vue — Galaxy theme redesign with glass cards,
admin user management section (create/list users, visible only to owner role)
- Frontend: TaskBoardView.vue — added "Full View" link to URL-based detail page
- Frontend: Router — added /tasks/:id route for TaskDetailView
- Frontend: App.vue — added TaskDetail to standaloneViews whitelist
- Frontend: tasks store — stable
Auth: Admin creates accounts, users log in with existing /api/v1/auth/login.
Login/Settings deliver visible Galaxy-consistent design with nexus-tokens.css tokens.
23 lines
1.2 KiB
C#
23 lines
1.2 KiB
C#
using Nexus.Api.Data;
|
|
|
|
namespace Nexus.Api.Repositories;
|
|
|
|
public interface IUserRepository
|
|
{
|
|
ValueTask<NexusUser?> GetByIdAsync(Guid userId, CancellationToken ct = default);
|
|
Task<NexusUser?> GetByEmailAsync(string normalizedEmail, CancellationToken ct = default);
|
|
Task<bool> AnyUsersAsync(CancellationToken ct = default);
|
|
Task<List<NexusUser>> GetAllAsync(CancellationToken ct = default);
|
|
Task<NexusUser> AddAsync(NexusUser user, CancellationToken ct = default);
|
|
Task UpdateAsync(NexusUser user, CancellationToken ct = default);
|
|
Task DeleteAsync(NexusUser user, CancellationToken ct = default);
|
|
|
|
Task<RefreshToken?> GetRefreshTokenByHashAsync(string tokenHash, CancellationToken ct = default);
|
|
Task<List<RefreshToken>> GetActiveTokensByFamilyAsync(Guid familyId, CancellationToken ct = default);
|
|
Task AddRefreshTokenAsync(RefreshToken token, CancellationToken ct = default);
|
|
Task UpdateRefreshTokenAsync(RefreshToken token, CancellationToken ct = default);
|
|
Task RevokeTokenAsync(string tokenHash, CancellationToken ct = default);
|
|
Task RevokeFamilyAsync(Guid familyId, CancellationToken ct = default);
|
|
Task RemoveExpiredTokensAsync(Guid userId, CancellationToken ct = default);
|
|
}
|