# OEE-api

API sử dụng Python Django, cơ sở dữ liệu MySQL
Cấu trúc dự án như sau:
1. Model làm việc với cơ sở dữ liệu
- Đường dẫn thư mục: OEE/model/
- Mỗi file đại diện do một model và một bảng trong cơ sở dữ liệu
- Năm hàm cơ bản được định nghĩa chung trong BaseModel (get_detail, get_list, update, insert, remove), các model khác có thể kế thừa. Trừ trường hợp có logic đặc biệt sẽ tự implement
2. Common định nghĩa các hàm tiện ích dùng chung
- Các hàm chủ yếu được định nghĩa trong Utility.py (thường dùng các hàm get_prop, del_prop, set_prop)
3. api là các class tương ứng với model
- Mỗi model thường sẽ ứng với một class api
- Class api cũng được kế thừa từ BaseApiView, BaseModel. Các hàm cơ bản thường dùng và không cần implement gì thêm (list, retrieve, edit, add, remove)
4. Các endpoint được định nghĩa trong urls.py

Các bước khi thêm một API quản lý một đối tượng mới:
1. Tạo thêm bảng trong cơ sở dữ liệu
2. Tạo class model
ví dụ:
from OEE.model.BaseModel import BaseModel

class Flag(BaseModel):
    def __init__(self):
        self.table = "tbl_flags"
        self.primary_key = "ID"
        self.fields = []
3. Tạo class api
ví dụ:
from OEE.api.Api import BaseApiView
from OEE.model.BaseModel import BaseModel
from OEE.model.Flag import Flag as FlagModel

class Flag(BaseApiView, BaseModel):
    def __init__(self):
        self.modelClass = FlagModel()
4. Khai báo endpoint vào urls.py
ví dụ:
    url(r'^admin/api/flags/$', Flag.as_view({'get': 'list', 'put': 'add'}), name="flags"),
    url(r'^admin/api/flags/(?P<pk>\d+)$', Flag.as_view({'get': 'retrieve', 'post': 'edit', 'delete': 'remove'}), name="flag-detail"),

Các chức năng đặc biệt:
1. Upload file
- Viết code trong OEE/api/UploadFile.py
2. Xuất file excel
- Viết trực tiếp trong api class, sử dụng thư viện xlsxwriter