summaryrefslogtreecommitdiff
path: root/src/database/database.rs
diff options
context:
space:
mode:
authorDaniel Hader <[email protected]>2026-06-02 20:37:40 -0500
committerDaniel Hader <[email protected]>2026-06-02 20:37:40 -0500
commit51fac3f3b6f73b649ba8109b37d8ff311b905cd4 (patch)
tree4a2eb771842bf65ccb6e95c6c1d59ef65cbd2a7d /src/database/database.rs
parent14a4d586b7c7abc86674724153757f15faf7262c (diff)
problem statement on submission page and submission logic tweaks
Diffstat (limited to 'src/database/database.rs')
-rw-r--r--src/database/database.rs53
1 files changed, 53 insertions, 0 deletions
diff --git a/src/database/database.rs b/src/database/database.rs
index 7444779..6ebbe1c 100644
--- a/src/database/database.rs
+++ b/src/database/database.rs
@@ -4,6 +4,8 @@ use r2d2::Pool;
use r2d2_sqlite::SqliteConnectionManager;
use r2d2_sqlite::rusqlite::OptionalExtension;
+use crate::database::submission::Submission;
+
use super::problem::Problem;
use super::user::User;
@@ -120,6 +122,27 @@ impl Database {
.map_err(|e| DatabaseError::Query(e.to_string()))?
)
}
+
+ pub fn fetch_problem(&self, problem_id: i64) -> Result<Option<Problem>, DatabaseError> {
+ static QUERY: &str = include_str!("sql/fetch_problem.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_one([problem_id], |row| {
+ Ok(Problem::new(
+ row.get("id")?,
+ row.get("title")?,
+ row.get("description")?,
+ ))
+ })
+ .optional()
+ .map_err(|e| DatabaseError::Query(e.to_string()))?
+ )
+ }
pub fn fetch_problems(&self) -> Result<Vec<Problem>, DatabaseError> {
static QUERY: &str = include_str!("sql/fetch_problems.sql");
@@ -143,6 +166,36 @@ impl Database {
)
}
+ pub fn insert_submission(
+ &self,
+ user_id: i64,
+ problem_id: i64,
+ language: &str,
+ details: &str,
+ code: &str,
+ ) -> Result<Submission, DatabaseError> {
+ static QUERY: &str = include_str!("sql/insert_submission.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_one((user_id, problem_id, language, details, code), |row| {
+ Ok(Submission::new(
+ row.get("id")?,
+ user_id,
+ problem_id,
+ language.to_owned(),
+ details.to_owned(),
+ code.to_owned()
+ ))
+ })
+ .map_err(|e| DatabaseError::Query(e.to_string()))?
+ )
+ }
+
pub fn initialize(&self) -> Result<(), DatabaseError> {
static QUERY: &str = include_str!("sql/initialize.sql");
let conn = self.pool