Купување на курс
Актери
- Најавен корисник
Чекор 1
На најавен корисник му се прикажува листа од сите достапни курсеви од каде корисникот селектира еден.
SELECT
c.id,
c.image_url,
c.color,
c.difficulty,
c.duration_minutes,
c.price,
ct.title_short,
ct.title,
(
SELECT
COUNT(*)
FROM
course_translate
WHERE
course_id = c.id
) AS translated_languages,
(
SELECT
COUNT(*)
FROM
course_content cc
JOIN course_version cv
ON cc.course_version_id = cv.id
WHERE
cv.course_id = c.id
AND cv.active = TRUE
) AS course_content_count,
(
SELECT
COUNT(*)
FROM
course_lecture cl
JOIN course_content cc
ON cl.course_content_id = cc.id
JOIN course_version cv
ON cc.course_version_id = cv.id
WHERE
cv.course_id = c.id
AND cv.active = TRUE
) AS course_lecture_count,
(
SELECT
AVG(r.rating)
FROM
review r
JOIN enrollment e
ON e.id = r.enrollment_id
JOIN course_version cv
ON cv.id = e.course_version_id
WHERE
cv.course_id = c.id
) AS avg_rating,
(
SELECT
JSON_AGG(tt.value)
FROM
course_tag ctag
JOIN tag t
ON t.id = ctag.tag_id
JOIN tag_translate tt
ON t.id = tt.tag_id
WHERE
ctag.course_id = c.id
AND tt.language = 'en'
AND t.type = 'skill'
) AS skills,
(
SELECT
JSON_AGG(tt.value)
FROM
course_tag ctag
JOIN tag t
ON t.id = ctag.tag_id
JOIN tag_translate tt
ON t.id = tt.tag_id
WHERE
ctag.course_id = c.id
AND tt.language = 'en'
AND t.type = 'interest'
) AS topics
FROM
course c
JOIN course_translate ct
ON c.id = ct.course_id
WHERE
ct.language = 'en';
Чекор 2
Откако корисникот кликнал на курс, му се прикажуваат детални информации за курсот.
SELECT
c.id,
c.image_url,
c.color,
c.difficulty,
c.duration_minutes,
c.price,
ct.title_short,
ct.title,
ct.description_short,
ct.description,
ct.description_long,
(
SELECT
COUNT(*)
FROM
course_translate
WHERE
course_id = c.id
) AS translated_languages,
(
SELECT
COUNT(*)
FROM
course_content cc
JOIN course_version cv
ON cc.course_version_id = cv.id
WHERE
cv.course_id = c.id
AND cv.active = TRUE
) AS course_content_count,
(
SELECT
COUNT(*)
FROM
course_lecture cl
JOIN course_content cc
ON cl.course_content_id = cc.id
JOIN course_version cv
ON cc.course_version_id = cv.id
WHERE
cv.course_id = c.id
AND cv.active = TRUE
) AS course_lecture_count,
(
SELECT
AVG(r.rating)
FROM
review r
JOIN enrollment e
ON e.id = r.enrollment_id
JOIN course_version cv
ON cv.id = e.course_version_id
WHERE
cv.course_id = c.id
) AS avg_rating,
(
SELECT
JSON_AGG(tt.value)
FROM
course_tag ctag
JOIN tag t
ON t.id = ctag.tag_id
JOIN tag_translate tt
ON t.id = tt.tag_id
WHERE
ctag.course_id = c.id
AND tt.language = 'en'
AND t.type = 'skill'
) AS skills,
(
SELECT
JSON_AGG(tt.value)
FROM
course_tag ctag
JOIN tag t
ON t.id = ctag.tag_id
JOIN tag_translate tt
ON t.id = tt.tag_id
WHERE
ctag.course_id = c.id
AND tt.language = 'en'
AND t.type = 'interest'
) AS topics,
(
SELECT
JSON_AGG(ctwwbl.what_will_be_learned)
FROM
course_translate_what_will_be_learned ctwwbl
WHERE
ctwwbl.course_translate_id = ct.id
) AS what_will_be_learned,
(
SELECT
JSON_AGG(
JSONB_BUILD_OBJECT(
'title', cct.title,
'position', cc.position,
'lectures', (
SELECT
JSON_AGG(
JSONB_BUILD_OBJECT(
'title', clt.title,
'description', clt.description,
'duration_minutes', cl.duration_minutes,
'position', cl.position,
'content_type', cl.content_type
)
ORDER BY cl.position
)
FROM
course_lecture cl
JOIN course_lecture_translate clt
ON clt.course_lecture_id = cl.id
WHERE
cl.course_content_id = cc.id
AND clt.language = 'en'
)
)
ORDER BY cc.position
)
FROM
course_content cc
JOIN course_content_translate cct
ON cct.course_content_id = cc.id
JOIN course_version cv
ON cc.course_version_id = cv.id
WHERE
cv.course_id = c.id
AND cv.active = TRUE
AND cct.language = 'en'
) AS course_content
FROM
course c
JOIN course_translate ct
ON c.id = ct.course_id
WHERE
ct.language = 'en';
Чекори 3
Корисникот кликнува на копчето за купување на курс
INSERT INTO enrollment (purchase_date, activation_date, completion_date, enrollment_status, user_id, course_version_id)
VALUES ('2026-01-25 00:00:00', null, null, 'pending', 1, 2);
purchase_date -> датум на купување activation_date -> датум на активација completion_date -> датум на завршување enrollment_status -> статус за тоа дали не е почнат, е почнат или е завршен курсот (default е pending бидејќи при купување на курсот тој не е започнат) user_id -> ид на корисник course_version_id -> ид на верзија на курсот која се купува
Last modified
3 days ago
Last modified on 01/28/26 00:18:12
Note:
See TracWiki
for help on using the wiki.
