A full-stack web application built as part of learning ASP.NET Core and Angular development, featuring user authentication and member management functionality.
practice/
├── API/ # ASP.NET Core Web API
├── client/ # Angular Frontend Application
├── practice.sln # Visual Studio Solution File
└── README.md # This file
- Framework: ASP.NET Core 9.0
- Database: SQLite with Entity Framework Core 9.0.8
- Authentication: JWT Bearer Authentication
- Security:
- Microsoft.AspNetCore.Authentication.JwtBearer 9.0.9
- Microsoft.IdentityModel.Tokens 8.14.0
- System.IdentityModel.Tokens.Jwt 8.14.0
- ORM: Entity Framework Core with SQLite provider
- Development Features:
- CORS enabled for Angular frontend
- Hot reload and development tools
- Framework: Angular 20.3.0 (Latest)
- Language: TypeScript 5.9.2
- Styling:
- Tailwind CSS 4.1.13
- DaisyUI 5.1.12 (Component library)
- Development Tools:
- Angular CLI 20.3.1
- Prettier for code formatting
- SSL enabled for development (HTTPS)
- Testing:
- Jasmine 5.9.0
- Karma 6.4.0
- Architecture:
- Reactive Forms
- RxJS 7.8.0 for reactive programming
- Standalone components (modern Angular approach)
- User registration and login
- JWT token-based authentication
- Password hashing and salting
- Secure token validation
- User activity tracking
- Member Profiles: Complete user profiles with photos, location, and personal information
- Photo Management: Upload, set main photo, and delete photos via Cloudinary integration
- Pagination System: Efficient data loading with configurable page sizes and navigation
- Advanced Filtering: Filter members by age range, gender, and activity status
- Like System: Many-to-many relationship for member likes/dislikes
- Messaging System: Real-time messaging between members
- RESTful API design with repository pattern
- Advanced Entity Framework relationships (one-to-one, one-to-many, many-to-many)
- Custom pagination with metadata (page count, total records, etc.)
- Action filters for automatic user activity logging
- Comprehensive error handling middleware
- Photo upload integration with Cloudinary
- Modern Angular 20 with standalone components and signals
- Component Communication: Parent-child communication with events and ViewChild
- HTTP Interceptors: Automatic loading states and request caching
- Custom Pipes: Time-ago formatting and other data transformations
- Reactive Forms: Form validation and dynamic user inputs
- Modal Management: Filter modals with native HTML5 dialog elements
- State Management: Local state with signals and persistent localStorage
Id: Unique identifier (GUID)DisplayName: User's display nameEmail: User's email addressPasswordHash: Hashed passwordPasswordSalt: Password salt for securityImageUrl: Profile image URL- One-to-one relationship with Member
Id: Links to AppUser IDDisplayName: Member's display nameDateOfBirth: Date of birth for age calculationGender: Member's genderCity,Country: Location informationDescription: Member bio/descriptionCreated,LastActive: Timestamp trackingImageUrl: Profile photo URL- One-to-many relationship with Photos
- Many-to-many relationships for Likes and Messages
Id: Unique identifierUrl: Cloudinary image URLPublicId: Cloudinary public ID for deletionMemberId: Foreign key to Member- Many-to-one relationship with Member
SourceMemberId: Member who likedTargetMemberId: Member who was liked- Composite primary key on both IDs
- Many-to-many relationship between Members
Id: Unique identifierSenderId: Member who sent the messageRecipientId: Member who received the messageContent: Message text contentDateSent: Timestamp of messageDateRead: Timestamp when read (nullable)- Foreign key relationships to Member entity
- .NET 9.0 SDK
- Node.js (for Angular)
- SQLite
cd API
dotnet restore
dotnet runcd client
npm install
npm startThe application will run with:
- API:
https://localhost:5001(or configured port) - Client:
https://localhost:4200
- JWT token authentication
- Password hashing with salt
- CORS configuration for secure cross-origin requests
- HTTPS enabled for development
- Token validation with symmetric security key
- Code Formatting: Prettier with Angular-specific configuration
- SSL Certificates: Local development certificates for HTTPS
- Hot Reload: Both API and client support hot reload during development
- Testing: Comprehensive testing setup with Jasmine and Karma
This project demonstrates modern full-stack development practices with ASP.NET Core and Angular, implementing secure authentication and following current best practices for both backend and frontend development.