web server

This commit is contained in:
2026-05-20 14:10:25 +07:00
parent 5ade939ff9
commit 190d2418da
30 changed files with 8917 additions and 0 deletions

View File

@@ -0,0 +1,93 @@
# RobotInstaller database
Thiết kế này bám theo `database.md` và sơ đồ database hiện có, sau đó bổ sung vài cột cần cho web server:
- `PackageType`: phân biệt package `.deb``docker`.
- `AppVersion`: version hiện tại của app đóng gói.
- metadata artifact: `DockerImage`, `FileChecksumSha256`, `FileSizeBytes`, `UploadedAt`.
- `Role`, `IsActive` cho tài khoản đăng nhập web.
## Database
Tên database được chọn: `RobotInstaller`
Server:
```powershell
172.20.235.176
```
Không lưu mật khẩu thật vào file cấu hình. Khi chạy local, tạo file `.env` từ `web-server/.env.example` rồi điền mật khẩu thật.
## Cấu trúc chính
| Bảng | Vai trò |
| --- | --- |
| `dbo.Users` | Người dùng web server |
| `dbo.Packages` | Danh mục package |
| `dbo.PackageVersions` | Các version của từng package |
| `dbo.Applications` | App được đóng gói từ nhiều package |
| `dbo.ApplicationPackages` | Liên kết app-package, có thể chọn version cụ thể |
## Ràng buộc quan trọng
- `Users.Username`, `Users.Email` là duy nhất.
- `Packages.PackageCode` là duy nhất.
- `Applications.AppCode` là duy nhất.
- Mỗi package không được trùng `Version`.
- Mỗi app chỉ chứa một dòng cho mỗi package.
- Mỗi package chỉ có tối đa một `IsLatest = 1`.
- `ApplicationPackages.SelectedVersionId` bắt buộc thuộc đúng `PackageId` trên cùng dòng.
## View cho API
| View | Dùng cho màn hình |
| --- | --- |
| `dbo.vw_PackageList` | Danh sách package kèm latest version |
| `dbo.vw_PackageVersionList` | Chi tiết version của package |
| `dbo.vw_ApplicationList` | Danh sách app kèm số package |
| `dbo.vw_ApplicationPackageDetails` | Chi tiết package/version trong app |
## Stored procedure
| Procedure | Mục đích |
| --- | --- |
| `dbo.SetLatestPackageVersion` | Đặt một version là latest và tự clear latest cũ |
| `dbo.DeletePackageVersion` | Xóa version và các liên kết app đang dùng version đó |
## Triển khai bằng sqlcmd
```powershell
$env:SQLCMDPASSWORD = '<mat-khau-sa>'
sqlcmd -S 172.20.235.176 -U sa -b -i .\database\01_create_database.sql
sqlcmd -S 172.20.235.176 -U sa -d RobotInstaller -b -i .\database\02_schema.sql
sqlcmd -S 172.20.235.176 -U sa -d RobotInstaller -b -i .\database\03_views.sql
```
Chạy các lệnh trên từ thư mục `web-server`.
Khi dùng `sqlcmd` để seed/test dữ liệu, thêm `-I` hoặc bật `SET QUOTED_IDENTIFIER ON` vì schema có filtered index cho ràng buộc một latest version trên mỗi package.
## Luồng dữ liệu đề xuất
1. Upload package mới:
- nếu package chưa tồn tại, insert vào `Packages`;
- insert version vào `PackageVersions`;
- gọi `dbo.SetLatestPackageVersion @PackageVersionId`.
2. Update package:
- insert thêm một dòng mới vào `PackageVersions`;
- gọi `dbo.SetLatestPackageVersion @PackageVersionId`.
3. Tạo app:
- insert vào `Applications`;
- insert các package được chọn vào `ApplicationPackages`;
- nếu user chọn version cụ thể, điền `SelectedVersionId`.
4. Xóa package:
- xóa dòng trong `Packages`;
- database tự cascade sang `PackageVersions``ApplicationPackages`.
5. Xóa version:
- gọi `dbo.DeletePackageVersion @PackageVersionId` để xóa cả liên kết app đang dùng version đó.