MigMikael / CodeRoomService

web service for coderoom backend
0 stars 0 forks source link

ไม่สามารถอัพโหลด Companion Resources ได้ #3

Open pinyotae opened 7 years ago

pinyotae commented 7 years ago

เป็นต้นว่าเราต้องการส่งตัวโจทย์ไปพร้อมกับ test case ที่เอาไว้ให้นักเรียนใช้ไปทดสอบกับเครื่องตัวเอง หรือว่าเราต้องการส่งเอกสารอย่างอื่นเพื่อให้ใช้อ้างอิง (เช่น อาจจะส่ง PDF ของบทเรียนไปให้ผู้เข้าสอบ) เราจะพบว่าระบบไม่มีช่องทางสำหรับการอัพโหลดข้อมูลดังกล่าว

MigMikael commented 7 years ago

สำหรับ issue นี้ผมขอแบ่งการพัฒนาออกเป็นสามส่วน ได้แก่

  1. จัดเก็บ Resource ลงระบบในจังหวะเดียวกับที่อาจารย์อัพโจทย์
  2. API จัดการ Resource แต่ละอัน เช่น สร้าง ลบ และจัดการการมองเห็นแต่ละไฟล์ในมุมมองนักศึกษา
  3. รวม Resource เข้ากับ API เดิม เช่น api/student/lesson/show ต้องคืน Resource ของแต่ละ Problem ไปด้วย
pinyotae commented 7 years ago

ดูแล้วเป็นแนวทางที่ปฏิบัติได้จริง ดำเนินการไปตามนั้นได้เลย (แต่ขอดู UX ของ front-end ประกอบในตอนท้ายหนัก ๆ หน่อย เพราะทาง front-end มีอะไรมา surprise ผมประจำ)

MigMikael commented 7 years ago

อัพเดทความคืบหน้าครับ

  1. จัดเก็บ Resource ลงระบบในจังหวะเดียวกับที่อาจารย์อัพโจทย์

ส่วนนี้จัดการโดยตั้งในระบบมองหาโฟล์เดอร์ที่ชื่อ resource ในไฟล์ซิปของโจทย์ที่อาจารย์อัพเข้าระบบ โดยระบบจะทำการอ่านไฟล์ทุกๆ ไฟล์ที่อยู่ในโฟลเดอร์นี้และจัดเก็บข้อมูลลงดาต้าเบส (ถ้าไม่มีโฟลเดอร์ resource ก็อัพโจทย์ได้ตามปรกติครับ ก็จะเป้นโจทย์ที่ไม่มี resource ใดๆ แต่แน่นอนว่าอาจารย์สามารถเพิ่มในภายหลังได้) screenshot 197

  1. API จัดการ Resource แต่ละอัน เช่น สร้าง ลบ และจัดการการมองเห็นแต่ละไฟล์ในมุมมองนักศึกษา

ส่วนนี้จัดการโดยสร้าง API ใหม่สาม API สำหรับอาจารย์ problem/resource/create [สำหรับเพิ่ม resource ลงใน problem] problem/resource/{id}/delete [สำหรับลบ resource ออกจาก problem] problem/resource/{id}/visible [สำหรับเปลี่ยนการมองเห็นแต่ละ resource ในมุมมองของนักศึกษา]

  1. รวม Resource เข้ากับ API เดิม เช่น api/student/lesson/show ต้องคืน Resource ของแต่ละ Problem ไปด้วย

เมื่อ problem ถูกลบ resource ต่างๆ ก็ถูกลบไปด้วย api/student/lesson/show คืน resource ของแต่ละ problem เฉพาะที่มีการเปิดการมองเห็น

ทั้งสามข้อนี้เสร็จสิ้นใน commit นี้ครับ 1f1797547f36adeb3ca5dc20248a278b5d8aeb03

พรุ่งนี้ผมจะประสานงานกับอู๋ในเรื่องนี้ครับ

pinyotae commented 7 years ago

ผมสงสัยว่าด้วยรูปแบบ API ของคุณ เวลาที่อาจารย์จะอัพของใหม่เข้าไปใน resource คุณจะให้อาจารย์จัดการยังไง เป็นต้นว่าตอนแรกมีไฟล์ example1.txt และ example2.txt ต่อมาอาจารย์จะแก้ข้อมูลในไฟล์ example1.txt (คืออยากอัพอันใหม่ไปทับอันเก่า), ลบไฟล์ example2.txt และ เพิ่ม example3.txt เข้าไป

นั่นคือสุดท้ายอาจารย์ต้องการให้ระบบมี example1.txt (version 2) และ example3.txt (ส่วน example2.txt ให้ลบทิ้ง) ถ้าเป็นแบบนี้ ลำดับงานของอาจารย์ต้องทำอย่างไรบ้าง

MigMikael commented 7 years ago

problem/resource/{id}/delete ลบ example1.txt problem/resource/{id}/delete ลบ example2.txt

problem/resource/create สร้าง example1.txt (version2) problem/resource/create สร้าง example3.txt

MigMikael commented 7 years ago

เพิ่อความมีประสิทธิภาพในการทำงาน ใน commit ล่าสุดนี้ 203555e260a71efb01bb9eaea2004625a1e0aa4f ผมได้เพิ่ม API สำหรับ Edit Resource ขึ้นมาอีกหนึ่งอันครับ

problem/resource/{id}/edit