generated from nhcarrigan/template
34c7ca8ba2
Add comprehensive user profile system allowing users to showcase their activity and customize their profiles. Database Changes: - Added profile fields to User model: slug, displayName, bio, profilePublic - Added index on slug field for efficient lookups API Changes: - Added GET /users/me endpoint to fetch current user - Added PUT /users/me endpoint to update user settings - Added GET /users/profile/:identifier endpoint for public profiles - Updated UserService with profile methods and statistics - Modified AuthService to include profile fields in user responses Frontend Changes: - Created ProfileComponent to display user profiles with stats - Created SettingsComponent for profile customization - Added profile and settings routes - Updated header dropdown menu with profile links - Enhanced UserService with profile methods - Added updateUser method to AuthService Features: - Custom profile slugs for clean URLs - Display names separate from usernames - User bios (up to 500 characters) - Public/private profile toggle - Activity statistics (suggestions, likes, comments, acceptance rate) - Badge display (Staff, Mod, VIP, Discord Member) - Beautiful witch-themed styling Closes #45
65 lines
2.0 KiB
TypeScript
65 lines
2.0 KiB
TypeScript
import { Route } from '@angular/router';
|
|
|
|
export const appRoutes: Route[] = [
|
|
{
|
|
path: '',
|
|
loadComponent: () => import('./components/home/home.component').then(m => m.HomeComponent)
|
|
},
|
|
{
|
|
path: 'games',
|
|
loadComponent: () => import('./components/games/games-list.component').then(m => m.GamesListComponent)
|
|
},
|
|
{
|
|
path: 'books',
|
|
loadComponent: () => import('./components/books/books-list.component').then(m => m.BooksListComponent)
|
|
},
|
|
{
|
|
path: 'music',
|
|
loadComponent: () => import('./components/music/music-list.component').then(m => m.MusicListComponent)
|
|
},
|
|
{
|
|
path: 'art',
|
|
loadComponent: () => import('./components/art/art-gallery.component').then(m => m.ArtGalleryComponent)
|
|
},
|
|
{
|
|
path: 'shows',
|
|
loadComponent: () => import('./components/shows/shows-list.component').then(m => m.ShowsListComponent)
|
|
},
|
|
{
|
|
path: 'manga',
|
|
loadComponent: () => import('./components/manga/manga-list.component').then(m => m.MangaListComponent)
|
|
},
|
|
{
|
|
path: 'admin/users',
|
|
loadComponent: () => import('./components/admin/admin-users.component').then(m => m.AdminUsersComponent)
|
|
},
|
|
{
|
|
path: 'admin/audit',
|
|
loadComponent: () => import('./components/admin/admin-audit.component').then(m => m.AdminAuditComponent)
|
|
},
|
|
{
|
|
path: 'admin/suggestions',
|
|
loadComponent: () => import('./components/admin/admin-suggestions.component').then(m => m.AdminSuggestionsComponent)
|
|
},
|
|
{
|
|
path: 'my-suggestions',
|
|
loadComponent: () => import('./components/my-suggestions/my-suggestions.component').then(m => m.MySuggestionsComponent)
|
|
},
|
|
{
|
|
path: 'my-likes',
|
|
loadComponent: () => import('./components/my-likes/my-likes.component').then(m => m.MyLikesComponent)
|
|
},
|
|
{
|
|
path: 'profile/:identifier',
|
|
loadComponent: () => import('./components/profile/profile.component').then(m => m.ProfileComponent)
|
|
},
|
|
{
|
|
path: 'settings',
|
|
loadComponent: () => import('./components/settings/settings.component').then(m => m.SettingsComponent)
|
|
},
|
|
{
|
|
path: '**',
|
|
redirectTo: ''
|
|
}
|
|
];
|