Пример #1
0
 public IActionResult PostCuber(Cuber c)
 {
     if (c.Id < 0)
     {
         CuberService.AddCuber(c);
     }
     else
     {
         CuberService.SaveCuber(c);
     }
     return(Created("/api/cuber/" + c.Id, c));
 }
Пример #2
0
        /// <summary>
        /// Updates an existing cuber
        /// </summary>
        /// <param name="cuber">The cuber to update</param>
        public void SaveCuber(Cuber cuber)
        {
            var conn = new MySqlConnection(ConnectionString);

            conn.Open();
            var query = @"UPDATE cuber SET name = @name WHERE id = @id";
            var cmd   = new MySqlCommand(query, conn);

            cmd.Parameters.AddWithValue("@name", cuber.Name);
            cmd.Parameters.AddWithValue("@id", cuber.Id);
            cmd.ExecuteNonQuery();
            UpdateSolves(cuber, conn);
            UpdateMetadata(cuber, conn);
            conn.Close();
        }
Пример #3
0
        /// <summary>
        /// Adds a new cuber to the database
        /// </summary>
        /// <param name="cuber">The cuber to add to the database</param>
        public void AddCuber(Cuber cuber)
        {
            var conn = new MySqlConnection(ConnectionString);

            conn.Open();
            var query = @"INSERT INTO Cuber (name) VALUES (@name)";
            var cmd   = new MySqlCommand(query, conn);

            cmd.Parameters.AddWithValue("@name", cuber.Name);
            cmd.ExecuteNonQuery();
            int id = (int)(cmd.LastInsertedId);

            cuber.Id = id;
            UpdateSolves(cuber, conn);
            UpdateMetadata(cuber, conn);
            conn.Close();
        }
Пример #4
0
        private void UpdateMetadata(Cuber cuber, MySqlConnection conn)
        {
            // delete old metadata
            var deleteQuery = @"DELETE FROM metadata WHERE cuber_id = @id";
            var deleteCmd   = new MySqlCommand(deleteQuery, conn);

            deleteCmd.Parameters.AddWithValue("@id", cuber.Id);
            deleteCmd.ExecuteNonQuery();

            // add updated metadata
            var insertQuery = @"INSERT INTO metadata (mkey, mvalue, cuber_id) VALUES (@key, @value, @cuberId)";

            foreach (var meta in cuber.Metadata)
            {
                var insertCmd = new MySqlCommand(insertQuery, conn);
                insertCmd.Parameters.AddWithValue("@key", meta.Key);
                insertCmd.Parameters.AddWithValue("@value", meta.Value);
                insertCmd.Parameters.AddWithValue("@cuberId", cuber.Id);
                insertCmd.ExecuteNonQuery();
            }
        }
Пример #5
0
        private void UpdateSolves(Cuber cuber, MySqlConnection conn)
        {
            // remove existing solves
            var deleteQuery = @"DELETE FROM solve WHERE cuber_id = @id";
            var deleteCmd   = new MySqlCommand(deleteQuery, conn);

            deleteCmd.Parameters.AddWithValue("@id", cuber.Id);
            deleteCmd.ExecuteNonQuery();

            // add current solves
            var insertQuery = @"INSERT INTO solve (event, time, cuber_id) values (@event, @time, @cuberId)";

            foreach (var time in cuber.Solves3x3)
            {
                var insertCmd = new MySqlCommand(insertQuery, conn);
                insertCmd.Parameters.AddWithValue("@event", "3x3");
                insertCmd.Parameters.AddWithValue("@time", time);
                insertCmd.Parameters.AddWithValue("@cuberId", cuber.Id);
                insertCmd.ExecuteNonQuery();
            }
            foreach (var time in cuber.SolvesOh)
            {
                var insertCmd = new MySqlCommand(insertQuery, conn);
                insertCmd.Parameters.AddWithValue("@event", "OH");
                insertCmd.Parameters.AddWithValue("@time", time);
                insertCmd.Parameters.AddWithValue("@cuberId", cuber.Id);
                insertCmd.ExecuteNonQuery();
            }
            foreach (var time in cuber.Solves4x4)
            {
                var insertCmd = new MySqlCommand(insertQuery, conn);
                insertCmd.Parameters.AddWithValue("@event", "4x4");
                insertCmd.Parameters.AddWithValue("@time", time);
                insertCmd.Parameters.AddWithValue("@cuberId", cuber.Id);
                insertCmd.ExecuteNonQuery();
            }
        }
Пример #6
0
        /// <summary>
        /// Gets a cuber, and its solves and metatata
        /// </summary>
        /// <param name="id">The cuber's id</param>
        /// <returns></returns>
        public Cuber GetCuber(int id)
        {
            var conn = new MySqlConnection(ConnectionString);

            conn.Open();

            // get name
            var getCuberQuery = "Select name FROM cuber WHERE id = @id";
            var getCuberCmd   = new MySqlCommand(getCuberQuery, conn);

            getCuberCmd.Parameters.AddWithValue("@id", id);
            var cuberReader = getCuberCmd.ExecuteReader();

            cuberReader.Read();
            var cuber = new Cuber()
            {
                Name = cuberReader[0].ToString(), Id = id
            };

            cuberReader.Close();

            // get solves
            var getSolvesQuery = @"SELECT event, time FROM solve where cuber_id = @id";
            var getSolvesCmd   = new MySqlCommand(getSolvesQuery, conn);

            getSolvesCmd.Parameters.AddWithValue("@id", id);
            var solvesReader = getSolvesCmd.ExecuteReader();

            while (solvesReader.Read())
            {
                var evt  = solvesReader[0].ToString();
                var time = Math.Round(Convert.ToDouble(solvesReader[1]) * 100) / 100;
                if (evt.Equals("3x3"))
                {
                    cuber.Solves3x3.Add(time);
                }
                else if (evt.Equals("OH"))
                {
                    cuber.SolvesOh.Add(time);
                }
                else if (evt.Equals("4x4"))
                {
                    cuber.Solves4x4.Add(time);
                }
            }
            solvesReader.Close();

            // get metadata
            var metadataQuery = @"SELECT mkey, mvalue FROM metadata WHERE cuber_id = @id";
            var metadataCmd   = new MySqlCommand(metadataQuery, conn);

            metadataCmd.Parameters.AddWithValue("@id", id);
            var metadataRader = metadataCmd.ExecuteReader();

            while (metadataRader.Read())
            {
                cuber.Metadata.Add(new CuberMetadata {
                    Key = metadataRader[0].ToString(), Value = metadataRader[1].ToString()
                });
            }
            metadataRader.Close();

            conn.Close();
            return(cuber);
        }