Table of Contents

ชื่อ - นามสกุลผู้สมัคร

ปัณณวิชญ์ โลหะนิมิต

How to start

Normal

clone this repo. set environment variable with this format. (.env.example is default valid file == "mv .env.example .env" is ok for testing)

DATABASE_URL=postgres://USERNAME:PASSWORD@db:PORT/DATABASE_NAME

it takes sometime, it's rust.

docker-compose up

Lazy script

git clone https://www.github.com/ImSoZRious/sgcu65-backend-assignment
cd sgcu65-backend-assignment/
mv .env.example .env
docker-compose up

Non-docker script

  1. setup postgresql \
  2. setup .env
  3. cargo run --release

Troubleshoot

โจทย์

รายละเอียดโจทย์

บริษัท SGCU ใช้วิธีการเช็คชื่อการเข้างานด้วยการแสกนบัตรพนักงานและจัดการข้อมูลต่างๆของคนในองค์กรด้วยการจดลงสมุดมาโดยตลอด คุณและทีม developer ได้มองเห็นปัญหาของวิธีดังกล่าวจึงต้องการที่จะเปลี่ยนระบบจัดการข้อมูลพนักงานบริษัทไปเป็นแบบ online เพื่อที่จะเปลี่ยนระบบนี้ให้ทันสมัยยิ่งขึ้น สามารถเก็บและแก้ไขข้อมูลได้ง่ายขึ้นคุณจึงยื่นเรื่องให้แก่ท่านประธาน จากการเสนอข้อมูลให้ประธานบริษัทเขาได้ถูกใจข้อเสนอดังกล่าวเป็นอย่างมาก จึงได้ร้องขอให้คุณและทีม Developer พัฒนาเว็บไซต์ดังกล่าวขึ้นเพื่อมาใช้งานและให้มีระบบการจัดการ task งานต่างๆ (เช่น tello หรือ jira) เพิ่มขึ้นมาด้วย คุณซึ่งเป็นหนึ่งในทีมได้รับหน้าที่ในการวางแผนและออกแบบ API เพื่อที่จะให้เว็บไซต์สามารถทำงานได้อย่างราบรื่น

งานของคุณ

เขียน API Service ตาม requirement ดังต่อไปนี้

รายละเอียดของ Feature (Minimum Requirement)

User

รายละเอียดการเก็บข้อมูล minimum อยู่ข้างล่าง

- สามารถเพิ่มพนักงานใหม่เข้าไปในระบบได้ (Create)
- สามารถดูข้อมูลของพนักงานทุกคนได้ (Read)
- สามารถแก้ไขข้อมูลของพนักงานได้ เช่นชื่อ-สกุล ตำแหน่ง และเงินเดือนของพนักงานได้ (Update)
- สามารถลบข้อมูลพนักงานในระบบได้ (Delete)
- สามารถค้นหาพนักงานโดยใช้ ชื่อ นามสกุล หรือ ตำแหน่งได้

Task

รายละเอียดการเก็บข้อมูล minimum อยู่ข้างล่าง

- สามารถสร้าง Task ใหม่ได้ (Create)
- สามารถดูข้อมูลของ Task ทั้งหมดได้ (Read)
- สามารถแก้ไข ข้อมูล/status ของ Task ได้ (Update)
- สามารถลบ Task ได้ (Delete)
- สามารถค้นหา Task ด้วย name หรือ id ได้ (hint: ถ้าใช้ RDBMS สามารถใช้กำหนด relation ของ model ได้)

Other

- สามารถ assign งานให้ user ได้โดยที่ user 1 คนสามารถรับได้หลายอันและ task 1 อันสามารถมีผู้รับผิดชอบได้หลายคน

รายละเอียดของ Feature (Optional)

Team

รายละเอียดการเก็บข้อมูล minimum อยู่ข้างล่าง

- สามารถสร้าง Team ใหม่ได้ (Create)
- สามารถดูข้อมูลของ Team ทั้งหมดได้ (Read)
- สามารถแก้ไข ข้อมูล ของ Team ได้ (Update)
- สามารถลบ Team ได้ (Delete)
- สามารถค้นหา Team ด้วยชื่อ หรือ id ได้
- สามารถ assign User เข้าทีมได้
- สามารถ assign Task ให้กับ team ได้
- เปลี่ยนจากการ assign task ให้ user เป็นการ assign task ให้ team แทน

Authentication

- [ ] สามารถเข้าสู่ระบบได้ (โดยใช้ email, รหัสผ่าน)

Authorization

สามารถแบ่งแยก user ออกเป็น 2 role คือ User กับ Admin 
- User
   - สามารถ login ด้วย username และ password ได้
   - สามารถแก้ไข password ของตนเองได้ 
   - สามารถดูข้อมูลของตนเองได้ (นั่นคือ API มีวิธีระบุตัวตนว่าใครเป็นคนยิง API) 
   - **ไม่สามารถ** Create Update Delete Read ได้ 
- Admin 
   - ทำสิ่งที่ employee ทำได้ 
   - สามารถ สิ่งที่ระบุไว้ 5 ข้อด้านบนได้ (ให้เฉพาะ HR ใช้งานเท่านั้น)

การเก็บข้อมูล (Minimum)

ในส่วนของการเก็บข้อมูลนี้คือ minimum requirement ที่จะต้องเก็บเข้าสู่ระบบถ้ามีเพิ่มเติมมามากกว่านี้สามารถใส่ได้เลย

User

- email
- firstname
- surname
- role

Task

- name
- content
- status
- deadline

Team

- name

DB Design

DB Desgin