Go to file
Kerod-Fresenbet-Gebremedhin2660 0bab51adc1 Empty commit to trigger CI/CD - 6
2026-03-04 10:58:41 +03:00
.idea added inittal assessment feature 2025-12-29 07:59:24 -08:00
.vscode minimal registeration implementation 2026-01-09 06:35:22 -08:00
cmd added cloudconvert for thumbnails + added ratings service 2026-02-18 02:56:08 -08:00
db user data seed adjustment 2026-02-27 01:46:03 -08:00
docs removed build files 2026-02-27 01:15:38 -08:00
gen/db added cloudconvert for thumbnails + added ratings service 2026-02-18 02:56:08 -08:00
internal removed build files 2026-02-27 01:15:38 -08:00
.air.toml init 2025-03-26 23:50:19 +03:00
.DS_Store test logs 2026-01-12 09:47:41 +03:00
.gitignore removed build files 2026-02-27 01:15:38 -08:00
db.sql fix: transfer not showing online bet issue 2025-06-16 16:24:42 +03:00
docker-compose.yml analytics service + inapp notification websocket fix 2026-02-16 08:36:46 -08:00
Dockerfile updated Dockerfile to use 1.25.5 Golang version 2026-01-22 06:24:11 -08:00
go.mod cloud convert integration + more advanced activity log + issue reporting + video file management fixes 2026-02-11 06:54:05 -08:00
go.sum cloud convert integration + more advanced activity log + issue reporting + video file management fixes 2026-02-11 06:54:05 -08:00
makefile afro SMS and partial ArifPay Payment Gateway integrations 2025-12-18 18:06:26 +03:00
new.env profile picture, birthday format and refresh token expiry fixes 2026-01-28 09:24:31 -08:00
README.md vimeo itegration + Google auth and fiberbase messaging minor fixes + profile completed status fix and profile progress (not course progress) tracker immplementation 2026-02-04 09:59:21 -08:00
sqlc.yaml fix: refactored the transactions into shop_transactions 2025-07-02 03:19:59 +03:00
test.html transaction maker-checker fixes 2025-07-11 15:48:59 +03:00

Yimaru Backend

Yimaru Backend is the server-side application that powers the Yimaru online learning system. It manages courses, lessons, quizzes, student progress, instructor content, and administrative operations for institutions and users on the platform.

Table of Contents


Installation

Before running the application, ensure you have the following installed:

Clone the repository:

git clone https://github.com/your-org/Yimaru-backend.git
cd Yimaru-backend

├── cmd/
│   └── main.go                  # Application entry point
├── internal/
│   ├── config/                  # Configuration and environment loading
│   │   └── config.go
│   ├── domain/                  # Domain models, constants, and roles
│   │   ├── course.go            # Course and lesson structures
│   │   └── roles.go             # Role definitions (e.g., RoleAdmin, RoleInstructor)
│   ├── repository/              # Database interaction layer
│   │   ├── course.go            # Course-related queries
│   │   ├── lesson.go            # Lesson-related database functions
│   │   ├── user.go              # User repository methods
│   │   └── ...                  # Other repository files
│   ├── services/                # Business logic and core services
│   │   ├── course/
│   │   │   └── service.go       # Course management logic
│   │   └── quiz/
│   │       ├── service.go       # Quiz management and evaluation logic
│   │       └── eval.go          # Evaluation logic for student progress
│   └── web_server/              # HTTP handlers, routes, middleware, and cron jobs
│       ├── cron.go              # Scheduled background tasks
│       └── handlers/
│           ├── course_handler.go   # Course-related API endpoints
│           ├── user_handler.go     # User-related endpoints
│           └── ...                 # Additional handlers
├── db/
│   └── migrations/              # SQL migration files
├── docs/
│   ├── swagger/                 # Swagger/OpenAPI documentation files
│   └── docs.go                  # Swaggo-generated docs
├── gen/
│   └── db/                      # SQLC-generated Go code for database access
├── makefile                     # Development and operations commands
├── .env                         # Environment configuration file
└── README.md                    # Project documentation


1. Course Category (Top-Level Classification)

Table: course_categories

Purpose:
Logical grouping of courses (e.g., Learning English, Other Courses).

Key Fields:

id  Primary identifier

name  Category name

is_active  Soft enable/disable

created_at  Audit timestamp

Relationships:

One Course Category → Many Courses

Course Category
└── Courses[]

2. Course

Table: courses

Purpose:
Represents a full course offering under a category.

Key Fields:

category_id  FK → course_categories.id

title, description

is_active

Relationships:

Belongs to one Course Category

Has many Sub-courses

Course Category
└── Course
    └── Sub-courses[]

3. Sub-course

Table: sub_courses

Purpose:
A learning unit within a course representing different skill levels
(e.g., Beginner, Intermediate, Advanced).

Key Fields:

course_id  FK → courses.id

title, description

thumbnail

display_order

level  BEGINNER | INTERMEDIATE | ADVANCED

is_active

Relationships:

Belongs to one Course

Has many Sub-course Videos

Has many Practices

Course
└── Sub-course
    ├── Sub-course Videos[]
    └── Practices[]

4. Sub-course Video

Table: sub_course_videos

Purpose:
Video learning content attached to a sub-course.

Key Fields:

sub_course_id  FK → sub_courses.id

title, description

video_url

duration, resolution

Publishing controls:

is_published

publish_date

visibility

instructor_id

thumbnail

display_order

is_active

Relationships:

Belongs to one Sub-course

Sub-course
└── Sub-course Video

5. Practice

Table: practices

Purpose:
Exercises or assessments that belong to a sub-course.

Key Fields:

sub_course_id  FK → sub_courses.id

title, description

banner_image

persona

is_active

Relationships:

Belongs to one Sub-course

One Practice → Many Practice Questions

Sub-course
└── Practice
    └── Practice Questions[]

6. Practice Question

Table: practice_questions

Purpose:
Individual questions within a practice session.

Key Fields:

practice_id  FK → practices.id

question

Voice support:

question_voice_prompt

sample_answer_voice_prompt

sample_answer

tips

type  MCQ | TRUE_FALSE | SHORT

Relationships:

Belongs to one Practice

Practice
└── Practice Question

Complete Hierarchical Flow (Compact View)
Course Category
└── Course
    └── Sub-course (with levels: BEGINNER, INTERMEDIATE, ADVANCED)
        ├── Sub-course Video
        └── Practice
            └── Practice Question

Architectural Observations

Simple three-level hierarchy: Category → Course → Sub-course

Level is now a property of sub-course, not a separate entity

Cascade deletes ensure referential integrity

Schema is well-suited for:

LMS platforms

Progressive learning apps

Video + assessment-based education systems