Appearance
App Platform — Technical Map
Route / page map
| Family | Route gốc | Wrapper / page chính |
|---|---|---|
| App settings | /s/app-settings | AppSettings.tsx |
| Message templates | /s/app-settings/message-template/* | AppSettingsSmsTemplate.tsx + AppSettingsZnsTemplate.tsx / AppSettingsSmsTemplateSms.tsx / AppSettingsNotificationTemplate.tsx |
| Customer / staff app | /s/app-settings/customer-staff-app/* | AppSettingsCustomerStaffApp.tsx |
| 3rd / constant config | /s/app-settings/3rd-config*, /s/app-settings/constant-config | AppSettings3rdConfig.tsx, AppSettingsConstantConfig.tsx |
| App inventory setting | /s/app-settings/inventory* | Inventory.tsx, InventoryCreate.tsx, InventoryDetail.tsx |
GraphQL / store map
Singleton app settings
| Thành phần | Vai trò |
|---|---|
setting.graphql | GetGlobalSettingsAndMetadata, UpsertAppSettings |
useSettings.ts | cache Pinia + localStorage, helper updateSetting |
useSettingStore.ts | store rất mỏng cho setting và locales |
Independent config islands
| File | Owner data |
|---|---|
3rd_config.graphql | system_config |
constant_config.graphql | constant_config |
notification_template.graphql | notification_template |
zns_config_template.graphql | zns_config, zns_oa_list, zns_template, sms_template |
| generated warehouse queries | warehouse, warehouse_type, branch mapping |
Data ownership
| Nhóm | Owner thực tế |
|---|---|
| Appointment / order / customer app / staff app | default.app_setting |
| Locale metadata | default.locale + app_setting |
| ZNS / SMS / notification template | notification domain |
| 3rd config / constant config | config tables riêng |
| App inventory setting | ecommerce.warehouse |
Boundary với module khác
| Module | Boundary |
|---|---|
notification | Settings chỉ nắm config; runtime execution nằm ngoài module này |
user | inventory setting và một số enrich logic vẫn kéo branch/account từ user module |
ecommerce | warehouse/config của inventory page thuộc ecommerce domain |
Rủi ro / Findings kỹ thuật
| Mức | Finding |
|---|---|
| Cao | useSettings.getSetting(refresh) và path refetch chưa thực sự ép bypass cache. |
| Cao | isValidImageDimensions() check width sai logic và bỏ quên minWidth. |
| Cao | CustomerAndStaffAppEditor emit updateValue thay vì update:modelValue, và nhánh customer non-app_version merge sai key. |
| Trung bình | createDictionaryLocales() khởi tạo accumulator bằng array thay vì object. |
| Trung bình | app inventory setting nằm trong route tree app-settings nhưng owner dữ liệu là warehouse, làm boundary kỹ thuật không thuần nhất. |