| | 1 | = ЕР Дијаграм = |
| | 2 | |
| | 3 | [[Image(shifter_er_diagram.png, 500px)]] |
| | 4 | |
| | 5 | ---- |
| | 6 | == Податочни побарувања == |
| | 7 | |
| | 8 | === Ентитети === |
| | 9 | |
| | 10 | 1. **User** – ентитет кој чува податоци за крајните корисници (клиенти) |
| | 11 | - user_id (primary key, bigint) |
| | 12 | - workPosition (string, задолжително) |
| | 13 | - companySize (enum {freelance, micro, small, medium, mid_market, enterprise, other}, задолжително) |
| | 14 | - points (int, задолжително) |
| | 15 | - favoriteCourses (int[], задолжително) |
| | 16 | - loginProvider (enum {local, google}, задолжително) |
| | 17 | - hasUsedFreeConsultation (boolean, задолжително) |
| | 18 | - isProfileComplete (boolean, задолжително) |
| | 19 | - isEmailVerified(boolean, задолжително) |
| | 20 | - email (string, задолжително) |
| | 21 | - password_hash (string, задолжително) |
| | 22 | - name (string, задолжително) |
| | 23 | |
| | 24 | 2. **Expert** – ентитет кој чува податоци за експертот |
| | 25 | - expert_id (primary key, bigint) |
| | 26 | - email (string, задолжително) |
| | 27 | - password_hash (string, задолжително) |
| | 28 | - name (string, задолжително) |
| | 29 | |
| | 30 | 3. **Enrollment** – ентитет кој чува податоци за превземање на курс од страна на клиент |
| | 31 | - enrollment_id (primary key, bigint) |
| | 32 | - activatedAt (date, задолжително) |
| | 33 | - completedAt (date, задолжително) |
| | 34 | - dateEnrolled (date, задолжително) |
| | 35 | - user_id (foreign key, bigint) |
| | 36 | |
| | 37 | 4. **Payment** – ентитет кој чува податоци за наплатата на корисниците за курс |
| | 38 | - payment_id (primary key, bigint) |
| | 39 | - ammount(double, задолжително) |
| | 40 | - date (date, задолжително) |
| | 41 | - paymentMethod (enum {card, paypal, casys}, задолжително) |
| | 42 | - paymentStatus (enum {pending, completed, failed}, задолжително) |
| | 43 | - enrollmend_id (foreign_key, bigint) |
| | 44 | |
| | 45 | 5. **Review** – ентитет кој чува податоци за оценките и коментарите за курс |
| | 46 | - review_id (primary key, bigint) |
| | 47 | - rating (int, задолжително) |
| | 48 | - comment (string, задолжително) |
| | 49 | - date (date, задолжително) |
| | 50 | - enrollmend_id (foreign_key, bigint) |
| | 51 | |
| | 52 | 6. **Course Version** – ентитет кој чува податоци за верзиите на курсеви |
| | 53 | - course_version_id (primary key, bigint) |
| | 54 | - versionNumber (int, задолжително) |
| | 55 | - createdAt (date, задолжително) |
| | 56 | - isActive (boolean, задолжително) |
| | 57 | - course_id (foreign_key, bigint) |
| | 58 | |
| | 59 | 7. **Course** – ентитет кој чува податоци за курсевите |
| | 60 | - course_id (primary key, bigint) |
| | 61 | - color (string, задолжително) |
| | 62 | - difficulty (enum {beginner, intermediate, advanced, expert}, задолжително) |
| | 63 | - durationMin (int, задолжително) |
| | 64 | - imageUrl (string, задолжително) |
| | 65 | - durationMin (double, задолжително) |
| | 66 | |
| | 67 | 8. **Course Translate** – ентитет кој чува податоци за различните преведувања за одреден курс |
| | 68 | - course_translate_id (primary key, bigint) |
| | 69 | - language (string, задолжително) |
| | 70 | - descriptionShort(string, задолжително) |
| | 71 | - description (string, задолжително) |
| | 72 | - descriptionLong (string, задолжително) |
| | 73 | - titleShort (string, задолжително) |
| | 74 | - title (string, задолжително) |
| | 75 | - whatWillBeLearned (string[], задолжително) |
| | 76 | - course_id (foreign_key, bigint) |
| | 77 | |
| | 78 | 9. **Course Content** – ентитет кој чува податоци за различните модули за одреден курс |
| | 79 | - course_content_id (primary key, bigint) |
| | 80 | - position (int, задолжително) |
| | 81 | - course_version_id (foreign_key, bigint) |
| | 82 | |
| | 83 | |
| | 84 | 10. **Course Content Translate** – ентитет кој чува податоци за различните преводи на модули за одреден курс |
| | 85 | - course_content_translate_id (primary key, bigint) |
| | 86 | - language (string, задолжително) |
| | 87 | - title(string, задолжително) |
| | 88 | - course_content_id (foreign_key, bigint) |
| | 89 | |
| | 90 | |
| | 91 | 11. **Course Lecture** – ентитет кој чува податоци за различните лекции за одреден модул на курс |
| | 92 | - course_lecture_id (primary key, bigint) |
| | 93 | - position(int, задолжително) |
| | 94 | - durationMin (int, задолжително) |
| | 95 | - contentType (enum {text, file, video, quiz}, задолжително) |
| | 96 | - course_content_id (foreign_key, bigint) |
| | 97 | |
| | 98 | |
| | 99 | 12. **Course Lecture Translate** – ентитет кој чува податоци за различните преведувања за лекции за одреден модул на курс |
| | 100 | - course_lecture_translate_id (primary key, bigint) |
| | 101 | - language (string, задолжително) |
| | 102 | - contentFileName (string, задолжително) |
| | 103 | - contentText (string, задолжително) |
| | 104 | - description (string, задолжително) |
| | 105 | - title (string, задолжително) |
| | 106 | - course_lecture_id (foreign_key, bigint) |
| | 107 | |
| | 108 | 13. **User Course Progress** – ентитет кој чува податоци за прогресот на корисник за лекција на одреден курс |
| | 109 | - user_course_progress_id (primary key, bigint) |
| | 110 | - isCompleted (boolean, задолжително) |
| | 111 | - completedAt (date, задолжително) |
| | 112 | - course_lecture_id (foreign_key, bigint) |
| | 113 | - enrollment_id (foreign_key, bigint) |
| | 114 | |
| | 115 | |
| | 116 | 14. **Verification Token** – ентитет кој чува податоци за токените кои се креирани за корисници да го верифицираат нивниот мејл |
| | 117 | - verification_token_uuid (primary key, uuid) |
| | 118 | - expiresAt (date, задолжително) |
| | 119 | - createdAt (date, задолжително) |
| | 120 | - user_id (foreign_key, bigint) |
| | 121 | |
| | 122 | ---- |
| | 123 | === Релации === |
| | 124 | |
| | 125 | 1. **has** (USER ↔ VERIFICATION_TOKEN, 1:1) |
| | 126 | Секој User има точно еден VerificationToken. |
| | 127 | Секој VerificationToken припаѓа точно на еден User. |
| | 128 | |
| | 129 | 2. **enrolls** (USER ↔ ENROLLMENT, 1:N) |
| | 130 | Еден User може да има повеќе Enrollments. |
| | 131 | Секое Enrollment припаѓа на точно еден User. |
| | 132 | |
| | 133 | 3. **has** (ENROLLMENT ↔ PAYMENT, 1:1) |
| | 134 | Секоја инстанца на Enrollment има точно една инстанца на Payment. |
| | 135 | Секоја инстанца на Payment припаѓа точно на една инстанца на Enrollment. |
| | 136 | |
| | 137 | 4. **has** (ENROLLMENT ↔ REVIEW, 1:1) |
| | 138 | Секоја инстанца на Enrollment има точно една инстанца на Review. |
| | 139 | Секоја инстанца на Review припаѓа точно на една инстанца на Enrollment. |
| | 140 | |
| | 141 | 5. **has** (ENROLLMENT ↔ COURSE_VERSION, N:1) |
| | 142 | Една инстанца на Enrollment припаѓа на точно една инстанца на CourseVersion. |
| | 143 | Една инстанца на CourseVersion може да биде дел од повеќе инстанци на Enrollment. |
| | 144 | |
| | 145 | 6. **has** (COURSE_VERSION ↔ COURSE, 1:N) |
| | 146 | Една инстанца на Course може да има повеќе инстанци на CourseVersion. |
| | 147 | Секоја инстанца на CourseVersion припаѓа на точно една инстанца на Course. |
| | 148 | |
| | 149 | 7. **has** (COURSE ↔ COURSE_TRANSLATE, N:1) |
| | 150 | Секоја инстанца на CourseTranslate припаѓа на точно една инстанца на Course. |
| | 151 | Една инстанца на Course може да има повеќе инстанци на CourseTranslate. |
| | 152 | |
| | 153 | 8. **has** (COURSE_VERSION ↔ COURSE_CONTENT, 1:N) |
| | 154 | Една инстанца на CourseVersion може да има повеќе инстанци на CourseContent. |
| | 155 | Секоја инстанца на CourseContent припаѓа на точно една инстанца на CourseVersion. |
| | 156 | |
| | 157 | 9. **has** (COURSE_CONTENT ↔ COURSE_CONTENT_TRANSLATE, 1:N) |
| | 158 | Една инстанца на CourseContent може да има повеќе инстанци на CourseContentTranslate. |
| | 159 | Секоја инстанца на CourseContentTranslate припаѓа на точно една инстанца на CourseContent. |
| | 160 | |
| | 161 | 10. **has** (COURSE_CONTENT ↔ COURSE_LECTURE, 1:N) |
| | 162 | Една инстанца на CourseContent може да има повеќе инстанци на CourseLecture. |
| | 163 | Секоја инстанца на CourseLecture припаѓа на точно една инстанца на CourseContent. |
| | 164 | |
| | 165 | 11. **has** (COURSE_LECTURE ↔ COURSE_LECTURE_TRANSLATE, 1:N) |
| | 166 | Една инстанца на CourseLecture може да има повеќе инстанци на CourseLectureTranslate. |
| | 167 | Секоја инстанца на CourseLectureTranslate припаѓа на точно една инстанца на CourseLecture. |
| | 168 | |
| | 169 | 12. **has progress** (CourseLecture 1 ──< UserCourseProgress >── 1 Enrollment) |
| | 170 | Секоја инстанца на UserCourseProgress се однесува на точно една инстанца на CourseLecture и точно една инстанца на Enrollment. |
| | 171 | Една инстанца на CourseLecture може да биде поврзана со повеќе инстанци на UserCourseProgress. |
| | 172 | Една инстанца на Enrollment може да биде поврзана со повеќе инстанци на UserCourseProgress. |
| | 173 | |
| | 174 | |
| | 175 | ---- |