# Travel Itinerary
##### tags: `project` `nodejs`
> Bài viết này sẽ phân tích cơ bản các chức năng và cấu trúc có trong đồ án của môn học **Thiết kế phần mềm** có tên gọi **Travel Itinerary**.
::: warning
Toàn bộ giao diện dành cho người dùng là Tiếng Việt
:::
## Mô hình phần mềm
Phần mềm sẽ sử dụng mô hình ==Model View Controller== (MVC).

## Phân hệ người dùng
Ứng dụng gồm các loại người dùng như sau:
1. Admin
2. Contributor
3. User
4. Guest
Tương ứng với mỗi loại người dùng sẽ có các quyền khác nhau.
## 1. Phân hệ người dùng nặc danh - <span style="color: red">Guest</span>
### 1.1. Trang chủ
- [ ] Hiển thị những khu vực hot nhất *(nhiều plan nhất)*
- [ ] Hiển thị những plan được nhiều người xem nhất
### 1.2. Tìm kiếm
- [ ] Tìm kiếm thông tin một địa điểm
- [ ] Tìm kiếm thông tin một khu vực
- [ ] Tìm kiếm một lịch trình của người dùng khác
::: success
Sử dụng kĩ thuật <span style="color: red;">full-text search</span> để tìm kiếm
:::
### 1.3. Đăng ký
Người dùng đăng ký tài khoản để có thể sử dụng các chức năng khác. Nên có xác thực email bằng OTP.
### 1.4. Đăng nhập
Đăng nhập sử dụng:
- [x] Tài khoản có sẵn
- [x] Google
## 2. Phân hệ người dùng cơ bản - <span style="color: red">User</span>
Người dùng cơ bản có các tính năng bao gồm <span style="color: green">Trang chủ và Tìm kiếm</span>.
### 2.1. Lịch trình
- [ ] Người dùng chọn thời gian và khu vực, số lượng người từ đó tạo lịch trình tại khu vực đó
- [ ] Cho phép chỉnh sửa lịch trình
- [ ] Lịch trình tự động lưu vào trong profile
- [ ] Gợi ý chuyến bay, nơi ở
- [ ] Gửi feedback về lịch trình
- [ ] Chọn các filter gồm những hoạt động muốn đi và không muốn đi.
- [ ] Nếu không đủ địa điểm để lập thành một plan thì thông báo cho người dùng
### 2.2. Xem chi tiết một khu vực
- [x] Danh sách các địa điểm tại khu vực đó
- [ ] Bản đồ khu vực có đánh dấu các địa điểm
- [x] Giới thiệu
- [x] Hình ảnh minh họa
- [ ] Gợi ý những khu vực khác (bao gồm các hoạt động tương tự)
- [x] Đánh giá một khu vực
### 2.3. Xem chi tiết một địa điểm
- [ ] Bản đồ khu vực có đánh dấu các địa điểm
- [x] Giới thiệu
- [x] Hình ảnh minh họa
- [x] Số lượng chuyến đi tại địa điểm này
- [ ] Gợi ý những địa điểm khác có hoạt động tương tự
- [x] Đánh giá một địa điểm
- [x] Địa điểm có còn mở cửa hay không (disable/available)
- [x] Thời gian mở/đóng cửa
- [x] Thời gian vui chơi thích hợp cho địa điểm đó (mins)
### 2.4. Quản lý thông tin cá nhân
- [x] Thay đổi email
- [x] Thay đổi mật khẩu
- [x] Cập nhập thông tin cá nhân (dob/fullname)
::: success
Cần phải xác nhận lại email mỗi khi người dùng thay đổi
:::
## 3. Người đóng góp - <span style="color: red">Contributor</span>
## 4. Phân hệ người quản lý - <span style="color: red">Admin</span>
:::info
==Quản lý== bao gồm các thao tác sau:
1. Xem danh sách
1. Xem chi tiết
1. Thêm
1. Xoá
1. Cập nhật
1. Và các thao tác chuyên biệt khác
:::
### 4.1 Quản lý khu vực
- Các chức năng ==quản lý== cơ bản
- Không được xoá lĩnh vực đã có địa điểm
### 4.2 Quản lý địa điểm
- Gỡ bỏ đại điểm
### 4.3 Quản lý danh sách người dùng và người đóng góp
- Các chức năng ==quản lý== cơ bản
:::warning
- Tài khoản user có được từ chức năng đăng ký tài khoản
- Tài khoản contributor do ban quản trị cung cấp
:::