# ASP.NET Core Web API პროექტის დოკუმენტაცია
## 📋 სარჩევი
- [პროექტის მიმოხილვა](#პროექტის-მიმოხილვა)
- [ფოლდერების სტრუქტურა](#ფოლდერების-სტრუქტურა)
- [პროექტის მუშაობის პრინციპი](#პროექტის-მუშაობის-პრინციპი)
- [ინსტალაცია და კონფიგურაცია](#ინსტალაცია-და-კონფიგურაცია)
- [API მარშრუტები](#api-მარშრუტები)
- [ძირითადი ფუნქციონალი](#ძირითადი-ფუნქციონალი)
- [გამოყენება და გაფართოება](#გამოყენება-და-გაფართოება)
- [კოდის კონვენციები](#კოდის-კონვენციები)
---
## 🎯 პროექტის მიმოხილვა
### ტექნოლოგიები
- **Framework:** ASP.NET Core 8.0
- **ენა:** C# 12
- **არქიტექტურა:** Modular Monolith with Clean Architecture
- **მონაცემთა ბაზა:** Entity Framework Core
- **ავთენტიფიკაცია:** JWT Token Based
### დანიშნულება
ეს არის მოდულარული Web API პროექტი, რომელიც გამიზნულია მასშტაბირებადი და მოქნილი ბექენდ სერვისების ასაგებად. პროექტი იყენებს Clean Architecture პრინციპებს და მოდულარულ მიდგომას.
### ძირითადი მახასიათებლები
- ✅ მოდულარული არქიტექტურა
- ✅ JWT ავთენტიფიკაცია და ავტორიზაცია
- ✅ Entity Framework Core ORM
- ✅ ვალიდაციის სისტემა
- ✅ DTO პატერნი
- ✅ მიდლვეარების სისტემა
---
## 📁 ფოლდერების სტრუქტურა
### 📦 Common/
**დანიშნულება:** საერთო კომპონენტები და სერვისები, რომლებიც გამოიყენება მთელ აპლიკაციაში.
#### Common/DTOs/
**დანიშნულება:** Data Transfer Objects - მონაცემების გადაცემის ობიექტები
##### Common/DTOs/Requests/
- **შეიცავს:** Request მოდელებს API ენდპოინტებისთვის
- **მაგალითი:**
```csharp
public class LoginRequest
{
public string Email { get; set; }
public string Password { get; set; }
}
```
##### Common/DTOs/Responses/
- **შეიცავს:** Response მოდელებს API პასუხებისთვის
- **მაგალითი:**
```csharp
public class ApiResponse<T>
{
public bool Success { get; set; }
public T Data { get; set; }
public string Message { get; set; }
}
```
#### Common/Entities/
**დანიშნულება:** ბაზის Entity-ების საბაზისო კლასები
##### BaseEntity.cs
```csharp
public abstract class BaseEntity
{
public int Id { get; set; }
public DateTime CreatedAt { get; set; }
public DateTime? UpdatedAt { get; set; }
public bool IsDeleted { get; set; }
}
```
#### Common/Helpers/
**დანიშნულება:** დამხმარე კლასები და utility ფუნქციები
#### Common/Services/Token/
**დანიშნულება:** JWT ტოკენების მართვის სერვისი
```csharp
public interface ITokenService
{
string GenerateToken(User user);
ClaimsPrincipal ValidateToken(string token);
}
```
#### Common/Validators/
**დანიშნულება:** საერთო ვალიდაციის ლოგიკა
---
### 🔧 Core/
**დანიშნულება:** აპლიკაციის ძირითადი ინფრასტრუქტურა და კონფიგურაცია
#### Core/Constants/
**დანიშნულება:** აპლიკაციის მუდმივები და კონფიგურაციის პარამეტრები
```csharp
public static class AppConstants
{
public const string AppName = "MyAPI";
public const string Version = "1.0.0";
public const int TokenExpirationDays = 7;
}
```
#### Core/Extensions/
**დანიშნულება:** Extension მეთოდები სერვისების და Pipeline-ის კონფიგურაციისთვის
##### PipelineExtensions.cs
```csharp
public static class PipelineExtensions
{
public static IApplicationBuilder UseCustomMiddlewares(this IApplicationBuilder app)
{
app.UseAuthentication();
app.UseAuthorization();
// სხვა მიდლვეარები
return app;
}
}
```
##### ServiceExtensions.cs
```csharp
public static class ServiceExtensions
{
public static IServiceCollection AddCustomServices(this IServiceCollection services)
{
services.AddScoped<ITokenService, TokenService>();
// სხვა სერვისები
return services;
}
}
```
#### Core/Middlewares/
**დანიშნულება:** Custom მიდლვეარები შეცდომების დამუშავებისთვის, ლოგირებისთვის და სხვა
```csharp
public class ErrorHandlingMiddleware
{
public async Task InvokeAsync(HttpContext context, RequestDelegate next)
{
try
{
await next(context);
}
catch (Exception ex)
{
await HandleExceptionAsync(context, ex);
}
}
}
```
---
### 💾 Data/
**დანიშნულება:** მონაცემთა ბაზასთან მუშაობის ლოგიკა
#### DataContext.cs
```csharp
public class DataContext : DbContext
{
public DataContext(DbContextOptions<DataContext> options) : base(options) { }
public DbSet<User> Users { get; set; }
public DbSet<EmailVerification> EmailVerifications { get; set; }
public DbSet<PasswordVerification> PasswordVerifications { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
// Entity კონფიგურაციები
base.OnModelCreating(modelBuilder);
}
}
```
**კავშირები:**
- იყენებს Models ფოლდერში განსაზღვრულ Entity კლასებს
- გამოიყენება Modules-ში სერვისების მიერ
---
### 📊 Enums/
**დანიშნულება:** Enumeration ტიპები აპლიკაციის სხვადასხვა სტატუსებისთვის
#### Enums/Auth/
##### ACCOUNT_STATUS.cs
```csharp
public enum AccountStatus
{
Pending = 0,
Active = 1,
Suspended = 2,
Deleted = 3
}
```
##### ROLES.cs
```csharp
public enum Roles
{
User = 0,
Admin = 1,
SuperAdmin = 2
}
```
---
### 📝 Models/
**დანიშნულება:** Domain მოდელები და Entity კლასები
#### Models/Auth/
##### User.cs
```csharp
public class User : BaseEntity
{
public string Email { get; set; }
public string PasswordHash { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public AccountStatus Status { get; set; }
public Roles Role { get; set; }
// Relations
public virtual ICollection<EmailVerification> EmailVerifications { get; set; }
public virtual ICollection<PasswordVerification> PasswordVerifications { get; set; }
}
```
##### EmailVerification.cs
```csharp
public class EmailVerification : BaseEntity
{
public int UserId { get; set; }
public string Token { get; set; }
public DateTime ExpiresAt { get; set; }
public string Code { get; set; }
public int AttemptCount { get; set; } = 0;
public virtual User User { get; set; }
}
```
##### PasswordVerification.cs
```csharp
public class PasswordVerification : BaseEntity
{
public int UserId { get; set; }
public string Token { get; set; }
public DateTime ExpiresAt { get; set; }
public string Code { get; set; }
public int AttemptCount { get; set; } = 0;
public virtual User User { get; set; }
}
```
---
### 🧩 Modules/
**დანიშნულება:** ფუნქციონალური მოდულები (Feature Modules)
#### Modules/Auth/
**დანიშნულება:** ავთენტიფიკაციისა და ავტორიზაციის მოდული
##### AuthExtensions.cs
```csharp
public static class AuthExtensions
{
public static IServiceCollection AddAuthModule(this IServiceCollection services)
{
services.AddScoped<IAuthService, AuthService>();
services.AddScoped<IUserService, UserService>();
// სხვა Auth სერვისები
return services;
}
}
```
##### Controllers/
**შეიცავს:** Auth კონტროლერებს
```csharp
[ApiController]
[Route("api/[controller]")]
public class AuthController : ControllerBase
{
[HttpPost("login")]
public async Task<IActionResult> Login([FromBody] LoginRequest request) { }
[HttpPost("register")]
public async Task<IActionResult> Register([FromBody] RegisterRequest request) { }
[HttpPost("forgot-password")]
public async Task<IActionResult> ForgotPassword([FromBody] ForgotPasswordRequest request) { }
}
```
##### DTOs/
**შეიცავს:** Auth მოდულის სპეციფიკურ DTO-ებს
```csharp
public class RegisterRequest
{
public string Email { get; set; }
public string Password { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}
```
##### Helpers/
**შეიცავს:** Auth დამხმარე კლასებს
- პაროლის ჰეშირება
- ტოკენების გენერაცია
- Email შაბლონები
##### Services/
**შეიცავს:** Auth ბიზნეს ლოგიკას
```csharp
public interface IAuthService
{
Task<AuthResponse> LoginAsync(LoginRequest request);
Task<AuthResponse> RegisterAsync(RegisterRequest request);
Task<bool> VerifyEmailAsync(string token);
Task<bool> ResetPasswordAsync(ResetPasswordRequest request);
}
```
##### Validations/
**შეიცავს:** Auth ვალიდაციის წესებს
```csharp
public class LoginRequestValidator : AbstractValidator<LoginRequest>
{
public LoginRequestValidator()
{
RuleFor(x => x.Email).NotEmpty().EmailAddress();
RuleFor(x => x.Password).NotEmpty().MinimumLength(6);
}
}
```
---
## 🔄 პროექტის მუშაობის პრინციპი
### აპლიკაციის ნაკადი
```mermaid
graph TD
A[Client Request] --> B[Middleware Pipeline]
B --> C[Controller]
C --> D[Service Layer]
D --> E[Data Layer]
E --> F[Database]
F --> E
E --> D
D --> C
C --> G[Response]
```
### მონაცემების ნაკადი
1. **HTTP Request** → მიდლვეარები (ავთენტიფიკაცია, ვალიდაცია, ლოგირება)
2. **Controller** → მიიღებს და ამუშავებს request-ს
3. **Service Layer** → ბიზნეს ლოგიკის შესრულება
4. **Data Layer** → მონაცემთა ბაზასთან ინტერაქცია
5. **Response** → DTO-ს ფორმირება და დაბრუნება
### არქიტექტურის პატერნი
პროექტი იყენებს **Modular Monolith** არქიტექტურას **Clean Architecture** პრინციპებით:
- **Presentation Layer:** Controllers, DTOs
- **Application Layer:** Services, Validators
- **Domain Layer:** Models, Enums
- **Infrastructure Layer:** Data, Helpers
---
## ⚙️ ინსტალაცია და კონფიგურაცია
### წინაპირობები
```bash
# .NET 8 SDK
dotnet --version
# Entity Framework CLI
dotnet tool install --global dotnet-ef
```
### დამოკიდებულებები
```xml
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="8.0.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="8.0.0" />
<PackageReference Include="FluentValidation.AspNetCore" Version="11.3.0" />
<PackageReference Include="AutoMapper.Extensions.Microsoft.DependencyInjection" Version="12.0.1" />
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.5.0" />
```
### Environment Variables
```json
{
"ConnectionStrings": {
"DefaultConnection": "Server=localhost;Database=MyAppDb;Trusted_Connection=true;"
},
"JwtSettings": {
"Secret": "your-secret-key-here",
"Issuer": "MyApp",
"Audience": "MyAppUsers",
"ExpirationDays": 7
},
"EmailSettings": {
"SmtpHost": "smtp.gmail.com",
"SmtpPort": 587,
"SmtpUser": "your-email@gmail.com",
"SmtpPass": "your-password"
}
}
```
### ინსტალაციის ნაბიჯები
```bash
# Repository-ს კლონირება
git clone https://github.com/yourusername/project.git
cd project
# დამოკიდებულებების დაინსტალირება
dotnet restore
# მონაცემთა ბაზის მიგრაცია
dotnet ef database update
# პროექტის გაშვება
dotnet run
```
---
## 🚀 API მარშრუტები
### Authentication Endpoints
| Method | Endpoint | აღწერა | Auth Required |
|--------|----------|--------|---------------|
| POST | `/api/auth/register` | ახალი მომხმარებლის რეგისტრაცია | ❌ |
| POST | `/api/auth/login` | მომხმარებლის ავტორიზაცია | ❌ |
| POST | `/api/auth/refresh-token` | ტოკენის განახლება | ✅ |
| POST | `/api/auth/forgot-password` | პაროლის აღდგენა | ❌ |
| POST | `/api/auth/reset-password` | პაროლის შეცვლა | ❌ |
| GET | `/api/auth/verify-email/{token}` | Email-ის ვერიფიკაცია | ❌ |
### Request/Response მაგალითები
#### Register Request
```json
POST /api/auth/register
{
"email": "user@example.com",
"password": "Password123!",
"firstName": "გიორგი",
"lastName": "გიორგაძე"
}
```
#### Login Response
```json
{
"success": true,
"data": {
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"refreshToken": "refresh_token_here",
"expiresIn": 604800,
"user": {
"id": 1,
"email": "user@example.com",
"firstName": "გიორგი",
"lastName": "გიორგაძე",
"role": "User"
}
},
"message": "წარმატებით შეხვედით სისტემაში"
}
```
---
## 💡 ძირითადი ფუნქციონალი
### 🔐 Authentication Service
```csharp
public class AuthService : IAuthService
{
private readonly DataContext _context;
private readonly ITokenService _tokenService;
private readonly IEmailService _emailService;
public async Task<AuthResponse> LoginAsync(LoginRequest request)
{
// 1. მომხმარებლის ძებნა
var user = await _context.Users
.FirstOrDefaultAsync(u => u.Email == request.Email);
// 2. პაროლის შემოწმება
if (!VerifyPassword(request.Password, user.PasswordHash))
throw new UnauthorizedException("არასწორი მონაცემები");
// 3. ტოკენის გენერაცია
var token = _tokenService.GenerateToken(user);
return new AuthResponse { Token = token, User = user };
}
}
```
### 📧 Email Service
```csharp
public class EmailService : IEmailService
{
public async Task SendVerificationEmailAsync(string email, string token)
{
var verificationUrl = $"https://yourapp.com/verify-email/{token}";
var subject = "ელ-ფოსტის დადასტურება";
var body = $"გთხოვთ დააჭიროთ ლინკს: {verificationUrl}";
await SendEmailAsync(email, subject, body);
}
}
```
### 🗄️ Database Models
```csharp
// User Entity Configuration
modelBuilder.Entity<User>(entity =>
{
entity.HasKey(e => e.Id);
entity.HasIndex(e => e.Email).IsUnique();
entity.Property(e => e.Email)
.IsRequired()
.HasMaxLength(100);
entity.HasMany(e => e.EmailVerifications)
.WithOne(e => e.User)
.HasForeignKey(e => e.UserId);
});
```
---
## 🛠️ გამოყენება და გაფართოება
### ახალი მოდულის დამატება
1. **შექმენით ახალი ფოლდერი Modules-ში:**
```bash
Modules/
YourModule/
Controllers/
Services/
DTOs/
Validations/
```
2. **დაამატეთ Extension კლასი:**
```csharp
public static class YourModuleExtensions
{
public static IServiceCollection AddYourModule(this IServiceCollection services)
{
services.AddScoped<IYourService, YourService>();
return services;
}
}
```
3. **დარეგისტრირეთ Program.cs-ში:**
```csharp
builder.Services.AddYourModule();
```
### ტესტირება
```bash
# Unit ტესტების გაშვება
dotnet test
# Integration ტესტები
dotnet test --filter Category=Integration
```
### Deployment
```bash
# Production build
dotnet publish -c Release -o ./publish
# Docker image
docker build -t myapp:latest .
docker run -p 5000:80 myapp:latest
```
---
## 📏 კოდის კონვენციები
### Naming Conventions
- **Classes:** PascalCase (მაგ: `UserService`)
- **Interfaces:** I prefix + PascalCase (მაგ: `IUserService`)
- **Methods:** PascalCase (მაგ: `GetUserById`)
- **Variables:** camelCase (მაგ: `userName`)
- **Constants:** UPPER_CASE (მაგ: `MAX_RETRY_COUNT`)
### ფაილების სტრუქტურა
```csharp
// 1. Using statements
using System;
using System.Collections.Generic;
// 2. Namespace
namespace MyApp.Modules.Auth.Services
{
// 3. Class documentation
/// <summary>
/// მომხმარებლის სერვისი
/// </summary>
public class UserService : IUserService
{
// 4. Private fields
private readonly DataContext _context;
// 5. Constructor
public UserService(DataContext context)
{
_context = context;
}
// 6. Public methods
public async Task<User> GetByIdAsync(int id)
{
// Implementation
}
// 7. Private methods
private bool ValidateUser(User user)
{
// Implementation
}
}
}
```
### Best Practices
- ✅ იყენებთ Dependency Injection
- ✅ ასინქრონული მეთოდები async/await პატერნით
- ✅ Exception handling try-catch ბლოკებით
- ✅ ლოგირება ILogger interface-ით
- ✅ ვალიდაცია FluentValidation-ით
- ✅ DTO პატერნი API კონტრაქტებისთვის
---
## 📚 დამატებითი რესურსები
- [ASP.NET Core Documentation](https://docs.microsoft.com/aspnet/core)
- [Entity Framework Core](https://docs.microsoft.com/ef/core)
- [JWT Authentication](https://jwt.io/introduction)
- [Clean Architecture](https://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html)
---
## 📄 ლიცენზია
MIT License
## 👥 Contributors
- თქვენი სახელი და გუნდის წევრები
---
*დოკუმენტაცია განახლდა: 2024*