From 328d0cd912dfa5dbda53a09ecdfeaeb93504b560 Mon Sep 17 00:00:00 2001 From: Daniel Hader Date: Wed, 3 Jun 2026 22:32:09 -0500 Subject: submission logic and fetching submissions --- src/database/database.rs | 51 +++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 50 insertions(+), 1 deletion(-) (limited to 'src/database/database.rs') diff --git a/src/database/database.rs b/src/database/database.rs index 6ebbe1c..961c39c 100644 --- a/src/database/database.rs +++ b/src/database/database.rs @@ -4,7 +4,7 @@ use r2d2::Pool; use r2d2_sqlite::SqliteConnectionManager; use r2d2_sqlite::rusqlite::OptionalExtension; -use crate::database::submission::Submission; +use crate::database::submission::{DisplaySubmission, Submission}; use super::problem::Problem; use super::user::User; @@ -195,6 +195,55 @@ impl Database { .map_err(|e| DatabaseError::Query(e.to_string()))? ) } + + pub fn fetch_submissions_by_problem_id(&self, problem_id: i64) -> Result, DatabaseError> { + static QUERY: &str = include_str!("sql/fetch_submissions_by_problem_id.sql"); + let conn = self.pool + .get() + .map_err(|e| DatabaseError::Connection(e.to_string()))?; + let mut statement = conn.prepare(QUERY) + .map_err(|e| DatabaseError::Query(e.to_string()))?; + + Ok(statement + .query_map([problem_id], |row| { + Ok(Submission::new( + row.get("id")?, + row.get("user_id")?, + row.get("problem_id")?, + row.get("language")?, + row.get("details")?, + row.get("code")?, + )) + }) + .map_err(|e| DatabaseError::Query(e.to_string()))? + .collect::, _>>() + .map_err(|e| DatabaseError::Query(e.to_string()))? + ) + } + + pub fn fetch_display_submissions(&self, problem_id: i64) -> Result, DatabaseError> { + static QUERY: &str = include_str!("sql/fetch_display_submissions.sql"); + let conn = self.pool + .get() + .map_err(|e| DatabaseError::Connection(e.to_string()))?; + let mut statement = conn.prepare(QUERY) + .map_err(|e| DatabaseError::Query(e.to_string()))?; + + Ok(statement + .query_map([problem_id], |row| { + Ok(DisplaySubmission { + id: row.get("id")?, + username: row.get("username")?, + language: row.get("language")?, + details: row.get("details")?, + code: row.get("code")?, + }) + }) + .map_err(|e| DatabaseError::Query(e.to_string()))? + .collect::, _>>() + .map_err(|e| DatabaseError::Query(e.to_string()))? + ) + } pub fn initialize(&self) -> Result<(), DatabaseError> { static QUERY: &str = include_str!("sql/initialize.sql"); -- cgit v1.2.3