# Code Style và Conventions

## Vue Components
- **Vue 3** với cả Options API và Composition API (codebase chủ yếu dùng Options API)
- File `.vue` sử dụng Single File Component (SFC) format
- Tên component: PascalCase (VD: `LadaSelect.vue`, `AppVersion.vue`)
- Alias `@` trỏ đến `src/`

## Naming Conventions
- **Files**: camelCase cho services/stores (VD: `userService.js`, `userStore.js`)
- **Routes**: kebab-case cho URL paths
- **Variables/Functions**: camelCase
- **Components**: PascalCase
- **Constants**: UPPER_SNAKE_CASE

## API Services Pattern
```js
// Mỗi service import apiClient và các path constants
import publicClient from "@/infrastructure/apiClient";
import { userPaths } from "@/infrastructure/apiPaths/userPath";

// Các function async trả về response.data
const userService = {
  async getList(params) {
    const response = await publicClient.get(userPaths.list, { params });
    return response.data;
  },
  async create(model) {
    const response = await publicClient.post(userPaths.create, model);
    return response.data;
  },
  // ...
};
export default userService;
```

## Pinia Store Pattern
```js
import { defineStore } from "pinia";
export const useUserStore = defineStore({
  id: "user",
  state: () => ({ ... }),
  getters: { ... },
  actions: { async myAction() { ... } },
});
```

## API Client
- `publicClient` (axios instance) - có Bearer token auth từ localStorage
- Interceptors: 401 → redirect login, 403 → redirect unauthorized
- validateStatus: 200-499 (không throw error cho 4xx để interceptor xử lý)
- Token lưu trong `localStorage.user` dưới dạng JSON

## Localization
- **Ngôn ngữ**: Tiếng Việt (UI labels, comments trong code)
- Error messages: Tiếng Việt ("Không thể kết nối tới máy chủ")

## Router Navigation Guard
- Tất cả routes đều cần auth trừ: login, register, unauthorized, test-unauthorized
- Không auth → redirect to login
- Route meta có `title` field dùng cho document.title

## API Path Organization
- Mỗi domain có 1 file path riêng trong `src/infrastructure/apiPaths/`
- Export named const (VD: `export const userPaths = { list: "...", create: "..." }`)

## Imports thường dùng
```js
import publicClient from "@/infrastructure/apiClient";
import { useUserStore } from "@/stores";
import router from "@/routers";
import moment from "moment";
import _ from "lodash";
```
