KIẾN TRÚC CÔNG NGHỆ · CTO

Bản đồ kỹ thuật

Bản đồ kỹ thuật và luồng đọc dữ liệu của website hiện tại: trang web, API công việc và lớp truy xuất dữ liệu.

Sơ đồ được viết bằng Mermaid để nội dung kỹ thuật có thể đọc, sửa và đối chiếu cùng mã nguồn. Các hình dưới đây mô tả bản mẫu đang có; không đại diện cho backend của game Võ.

Phần này giải thích cách các thành phần công nghệ kết nối. Để xem ai nhận yêu cầu từ CEO, phân công và bàn giao kết quả, đọc quy trình phối hợp đội ngũ.

HỆ THỐNG HIỆN CÓPhiên bản sơ đồ1.0.0

Bản đồ hệ thống hiện tại

Trình duyệt nhận trang từ Astro. Những trang cần dữ liệu mới gọi lớp truy xuất dữ liệu trên máy chủ; API công việc là một đường đọc riêng.

Cuộn trong khung để khám phá sơ đồ ở kích thước đầy đủ. Có thể dùng phím mũi tên khi chọn khung.

Sơ đồ được dựng khi đến vùng xem. Có thể đọc đầy đủ các bước dưới đây.

  1. Trang tĩnh được dựng khi build. Trang SSR dựng HTML khi có yêu cầu; cả hai đều được đọc bằng trình duyệt.
  2. Trang SSR gọi repository trực tiếp. API công việc cũng dùng repository đó để trả JSON, không phải bước trung gian bắt buộc của trang SSR.
  3. Công việc dùng bộ dữ liệu cục bộ. Hồ sơ thành viên kết hợp danh mục thành viên với bản ghi hoạt động cục bộ và chỉ đưa ra phần được phép công khai.
  4. Bản mẫu chưa có cơ sở dữ liệu vận hành, API ghi công khai, hệ thống đăng nhập hay thanh toán.
Xem nguồn Mermaid · v1.0.0
flowchart TB
accTitle: Bản đồ hệ thống website hiện tại
accDescr: Trình duyệt đọc trang tĩnh, trang SSR hoặc API công việc. Trang SSR và API dùng repository để đọc dữ liệu cục bộ.
browser["Trình duyệt"]
staticPages["Trang tĩnh Astro"]
ssrPages["Trang SSR Astro"]
ticketApi["API công việc · chỉ GET"]
ticketRepo["Repository công việc"]
teamRepo["Repository thành viên"]
ticketData[("Dữ liệu công việc cục bộ")]
teamData[("Danh mục và hoạt động thành viên")]
browser -->|"Đọc trang"| staticPages
browser -->|"Đọc trang"| ssrPages
browser -->|"Gọi GET"| ticketApi
ssrPages --> ticketRepo
ssrPages --> teamRepo
ticketApi --> ticketRepo
ticketRepo --> ticketData
teamRepo --> teamData
QT0006Phiên bản quy trình1.1.0
HỆ THỐNG HIỆN CÓPhiên bản sơ đồ1.0.0

Đọc một công việc theo ID

GET /api/tickets/{id} phân biệt ID sai định dạng, công việc không tồn tại và kết quả hợp lệ. Trang chi tiết dùng cùng lớp dữ liệu để dựng HTML.

Cuộn trong khung để khám phá sơ đồ ở kích thước đầy đủ. Có thể dùng phím mũi tên khi chọn khung.

Sơ đồ được dựng khi đến vùng xem. Có thể đọc đầy đủ các bước dưới đây.

  1. Ứng dụng gửi GET /api/tickets/{id} bằng ID ổn định của công việc.
  2. ID sai định dạng nhận HTTP 400. ID hợp lệ được tra cứu qua repository.
  3. Không có bản ghi nhận HTTP 404. Có bản ghi nhận HTTP 200 với đối tượng ticket chứa các trường công khai.
  4. Đường /tickets/{id}/ là trang HTML SSR riêng: gọi repository trực tiếp và trả trang 404 khi ID sai hoặc không tồn tại.
Xem nguồn Mermaid · v1.0.0
sequenceDiagram
accTitle: API đọc một công việc theo ID
accDescr: API kiểm định dạng ID, tra cứu repository và trả lỗi 400, lỗi 404 hoặc dữ liệu công khai 200.
participant client as Bên gọi
participant api as API công việc
participant repo as Repository
client->>api: GET /api/tickets/{id}
alt ID sai định dạng
api-->>client: 400 · invalid_id
else ID hợp lệ
api->>repo: get(id)
repo-->>api: Bản ghi hoặc null
alt Không tìm thấy
api-->>client: 404 · not_found
else Có bản ghi
api->>api: Chọn trường công khai
api-->>client: 200 · ticket
end
end
QT0007Phiên bản quy trình1.1.0
HỆ THỐNG HIỆN CÓPhiên bản sơ đồ1.0.0

Đọc danh sách theo từng trang

GET /api/tickets nhận mã dự án, giới hạn số mục và con trỏ trang tiếp. Mỗi phản hồi có tối đa 50 công việc.

Cuộn trong khung để khám phá sơ đồ ở kích thước đầy đủ. Có thể dùng phím mũi tên khi chọn khung.

Sơ đồ được dựng khi đến vùng xem. Có thể đọc đầy đủ các bước dưới đây.

  1. Yêu cầu đầu có gameId và limit; mặc định là vo và 20. limit phải là số nguyên từ 1 đến 50.
  2. Repository kiểm tra truy vấn. Nếu có after, ID đó phải tồn tại và thuộc cùng dự án; truy vấn hoặc con trỏ sai nhận HTTP 400.
  3. Kết quả chứa items công khai và nextCursor. Dự án hợp lệ về định dạng nhưng chưa có công việc trả danh sách rỗng.
  4. Khi nextCursor khác null, gửi nó qua after cùng gameId để đọc tiếp. null nghĩa là đã hết danh sách hiện tại; giới hạn phản hồi chưa chứng minh năng lực vận hành quy mô lớn.
Xem nguồn Mermaid · v1.0.0
sequenceDiagram
accTitle: API phân trang danh sách công việc
accDescr: Repository kiểm tra dự án, giới hạn và con trỏ, sau đó trả danh sách công khai cùng con trỏ kế tiếp.
participant client as Bên gọi
participant api as API công việc
participant repo as Repository
Note over client,api: gameId=vo, limit=20
client->>api: GET /api/tickets
api->>repo: list(gameId, limit, after)
alt Truy vấn hoặc con trỏ không hợp lệ
repo-->>api: InvalidTicketQuery
api-->>client: 400 · invalid_query
else Hợp lệ
repo-->>api: items và nextCursor
api->>api: Chọn trường công khai của từng mục
api-->>client: 200 · items và nextCursor
opt nextCursor khác null
client->>api: GET cùng gameId, after=nextCursor
api->>repo: Đọc trang tiếp
repo-->>api: items và nextCursor mới
api-->>client: 200 · trường công khai
end
end

ĐỀ XUẤT · CHƯA TRIỂN KHAI

Khi dữ liệu và nhu cầu tăng

Repository giữ vai trò làm hợp đồng giữa giao diện và nơi lưu dữ liệu. Bước tiếp theo có thể thay bộ dữ liệu cục bộ bằng cơ sở dữ liệu, với tra cứu ID có chỉ mục và phân trang tại nguồn. Đây là hướng mở rộng; bản mẫu hiện tại chưa chứng minh năng lực phục vụ quy mô lớn.

Đăng nhập, phân quyền, tiếp nhận hồ sơ và thao tác ghi dữ liệu cần yêu cầu, thiết kế cùng quyền triển khai riêng. Các sơ đồ hiện tại chỉ mô tả đường đọc công khai.

Về quy trình phối hợp đội ngũ