Go to file
2026-03-24 04:58:05 -07: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 MinIO integration + speaking implementation adjustment 2026-03-12 07:06:16 -07:00
db data seed + file upload handle fixes 2026-03-24 04:58:05 -07:00
docs data seed + file upload handle fixes 2026-03-24 04:58:05 -07:00
gen/db MinIO integration + speaking implementation adjustment 2026-03-12 07:06:16 -07:00
internal data seed + file upload handle fixes 2026-03-24 04:58:05 -07: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 MinIO integration + speaking implementation adjustment 2026-03-12 07:06:16 -07:00
Dockerfile updated Dockerfile to use 1.25.5 Golang version 2026-01-22 06:24:11 -08:00
go.mod MinIO integration + speaking implementation adjustment 2026-03-12 07:06:16 -07:00
go.sum MinIO integration + speaking implementation adjustment 2026-03-12 07:06:16 -07: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 readme update 2026-03-17 00:57:39 -07: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 Course Sub-categories

Course Category
└── Course Sub-categories[]

2. Course Sub-category

Table: course_sub_categories

Purpose:
A grouping within a category (e.g., Speaking, Listening under Learning English).

Key Fields:

category_id  FK → course_categories.id

title, description

is_active

Relationships:

Belongs to one Course Category

Has many Courses

Course Category
└── Course Sub-category
    └── Courses[]

3. Course

Table: courses

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

Key Fields:

sub_category_id  FK → course_sub_categories.id

title, description

thumbnail

display_order

level  BEGINNER | INTERMEDIATE | ADVANCED

is_active

Relationships:

Belongs to one Course Sub-category

Has many Course Videos

Has many Practices

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

4. Course Video

Table: course_videos

Purpose:
Video learning content attached to a course.

Key Fields:

course_id  FK → 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 Course

Course
└── Course Video

5. Practice

Table: practices

Purpose:
Exercises or assessments that belong to a course.

Key Fields:

course_id  FK → courses.id

title, description

banner_image

persona

is_active

Relationships:

Belongs to one Course

One Practice → Many Practice Questions

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-category
    └── Course (with levels: BEGINNER, INTERMEDIATE, ADVANCED)
        ├── Course Video
        └── Practice
            └── Practice Question

Architectural Observations

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

Level is now a property of 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