Skip to content

Commit 6bb0d73

Browse files
committed
feat: filter courses by release status
1 parent 748c027 commit 6bb0d73

File tree

7 files changed

+29
-8
lines changed

7 files changed

+29
-8
lines changed

Cargo.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ resolver = "2"
88
[package]
99
name = "backend"
1010
description = "Backend API and services for StackClass"
11-
version = "1.0.1"
11+
version = "1.1.0"
1212
edition = "2024"
1313

1414
default-run = "stackclass-server"
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
-- Migration to add index on courses.release_status for better query performance
2+
3+
-- Add index on release_status column
4+
CREATE INDEX idx_courses_release_status ON courses(release_status);

openapi.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,16 @@
66
"license": {
77
"name": ""
88
},
9-
"version": "1.0.1"
9+
"version": "1.1.0"
1010
},
1111
"paths": {
1212
"/v1/courses": {
1313
"get": {
1414
"tags": [
1515
"Course"
1616
],
17-
"summary": "Find all courses.",
18-
"operationId": "find-all-courses",
17+
"summary": "Find all released courses (beta and live status)",
18+
"operationId": "find-released-courses",
1919
"responses": {
2020
"200": {
2121
"description": "Courses retrieved successfully",

src/handler/course.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,17 +38,17 @@ use crate::{
3838

3939
// The Course Service Handlers.
4040

41-
/// Find all courses.
41+
/// Find all released courses (beta and live status)
4242
#[utoipa::path(
43-
operation_id = "find-all-courses",
43+
operation_id = "find-released-courses",
4444
get, path = "/v1/courses",
4545
responses(
4646
(status = 200, description = "Courses retrieved successfully", body = Vec<CourseResponse>),
4747
),
4848
tag = "Course"
4949
)]
5050
pub async fn find(State(ctx): State<Arc<Context>>) -> Result<impl IntoResponse> {
51-
Ok((StatusCode::OK, Json(CourseService::find(ctx).await?)))
51+
Ok((StatusCode::OK, Json(CourseService::find_released(ctx).await?)))
5252
}
5353

5454
/// Create a course.

src/repository/course.rs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,17 @@ impl CourseRepository {
8282
Ok(rows)
8383
}
8484

85+
/// Find all released courses (beta and live status)
86+
pub(crate) async fn find_released(db: &Database) -> Result<Vec<CourseModel>> {
87+
let rows = sqlx::query_as::<_, CourseModel>(
88+
r#"SELECT * FROM courses WHERE release_status != 'alpha'"#,
89+
)
90+
.fetch_all(db.pool())
91+
.await?;
92+
93+
Ok(rows)
94+
}
95+
8596
/// Update a course in the database.
8697
pub async fn update(tx: &mut Transaction<'_>, course: &CourseModel) -> Result<CourseModel> {
8798
let row = sqlx::query_as::<_, CourseModel>(

src/service/course.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,12 @@ impl CourseService {
4141
Ok(courses.into_iter().map(Into::into).collect())
4242
}
4343

44+
/// Find all released courses (beta and live status)
45+
pub async fn find_released(ctx: Arc<Context>) -> Result<Vec<CourseResponse>> {
46+
let courses = CourseRepository::find_released(&ctx.database).await?;
47+
Ok(courses.into_iter().map(Into::into).collect())
48+
}
49+
4450
/// Create new course from git repository URL
4551
pub async fn create(ctx: Arc<Context>, repository: &str) -> Result<CourseResponse> {
4652
let Config { cache_dir, github_token, .. } = &ctx.config;

0 commit comments

Comments
 (0)