Skip to content
Permalink
5c6a5e07b5
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Go to file
 
 
Cannot retrieve contributors at this time
1360 lines (1156 sloc) 57.3 KB
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using MySql.Data.MySqlClient;
using TeamDBAwesome.Models;
using System.Diagnostics;
namespace TeamDBAwesome.SqlService
{
public class MySqlService
{
private MySqlConnection SqlConn;
private string server, database, uid, password;
//constructor
/// <summary>
/// Creates an instance of the MySqlService
/// </summary>
public MySqlService()
{
Init_Connection();
}
/// <summary>
/// creates the actual connection, keeping things private
/// </summary>
private void Init_Connection()
{
server = "localhost";
database = "chinook";
uid = "root";
//changeme
password = "";
string connectionString = "SERVER=" + server + ";" + "DATABASE=" + database + ";" + "UID=" + uid + ";" + "PASSWORD=" + password + ";";
SqlConn = new MySqlConnection(connectionString);
}
private string GetDBString(string SqlFieldName, MySqlDataReader Reader)
{
return Reader[SqlFieldName].Equals(DBNull.Value) ? String.Empty : Reader.GetString(SqlFieldName);
}
private DateTime GetSqlDate(string SqlFieldName, MySqlDataReader Reader)
{
return new DateTime();
}
/// <summary>
/// opens a connection to the DB
/// </summary>
/// <returns>a bool representing the success or failure</returns>
private bool OpenConnection()
{
try
{
SqlConn.Open();
return true;
}
catch (Exception e)
{
return false;
}
}
/// <summary>
/// closes a connection to the DB
/// </summary>
/// <returns>bool for success or failure</returns>
private bool CloseConnection()
{
try
{
SqlConn.Close();
return true;
}
catch (Exception e)
{
return false;
}
}
/// <summary>
/// Adds a new User into the DB
/// </summary>
/// <param name="newCust">a new customer object</param>
/// <returns>a 0 on success, 1 otherwise</returns>
public int AddNewUser(Customer newCust)
{
bool open = this.OpenConnection();
if (open == true)
{
//do the update into person
string update = "INSERT into chinook.Person(LastName,FirstName,Address,City,State,PostalCode,Country,Phone,Fax,Email)" +
" VALUES (\"" + newCust.LName + "\",\"" + newCust.FName + "\",\"" + newCust.Address + "\",\"" + newCust.City + "\",\"" + newCust.State +
"\",\"" + newCust.Post + "\",\"" + newCust.Country + "\",\"" + newCust.Phone + "\",\"" + newCust.Fax + "\",\"" + newCust.Email + "\");";
MySqlCommand command = new MySqlCommand(update, SqlConn);
command.ExecuteNonQuery();
//now we need to get the primary key from that recent update
string pk_query = "SELECT LAST_INSERT_ID()";
command = new MySqlCommand(pk_query, SqlConn);
string newPersonID = command.ExecuteScalar() + "";
//it turns out that CustomerID isn't an auto incrementing value because people suck, so we need to get that
string cust_pk_query = "SELECT CustomerID FROM customer ORDER BY CustomerId DESC LIMIT 1";
command = new MySqlCommand(cust_pk_query, SqlConn);
string nextCustIDstring = command.ExecuteScalar() + "";
int next_custID_int = int.Parse(nextCustIDstring);
next_custID_int = next_custID_int + 1;
nextCustIDstring = next_custID_int.ToString();
//now we can put into Customer
if (newCust.Company == "" || newCust.Company == null)
{
update = "INSERT INTO chinook.Customer(CustomerID,Company,SupportRepID,PersonID) VALUES (" + nextCustIDstring + ",\"" + newCust.Company + "\",\"" + newCust.SupportRepId +
"\",\"" + newPersonID + "\")";
}
else
{
update = "INSERT INTO chinook.Customer(CustomerID,Company,SupportRepID,PersonID) VALUES (" + nextCustIDstring + ", NULL" + "," + newCust.SupportRepId +
"," + newPersonID + ")";
}
command = new MySqlCommand(update, SqlConn);
command.ExecuteNonQuery();
//close the connection
this.CloseConnection();
return int.Parse(newPersonID);
}
else
{
return 0;
}
}
public int AddTrack(Track track)
{
bool open = this.OpenConnection();
if(open == true)
{
string lastTackQuery = "select TrackId from track order by trackid desc limit 1";
MySqlCommand cmd = new MySqlCommand(lastTackQuery, SqlConn);
int nextNum = int.Parse(cmd.ExecuteScalar() + "") + 1;
string albumAndArtistQuery = "select AlbumId,ArtistID from album left join artist on album.artistid = artist.artistid " +
"where Title = " + track.AlbumTitle + " and Name = " + track.artist;
cmd = new MySqlCommand(albumAndArtistQuery, SqlConn);
MySqlDataReader reader = cmd.ExecuteReader();
string albumidstring = "", artistidstring = "";
int artistid = 0, albumid = 0;
while (reader.Read())
{
albumidstring = (GetDBString("AlbumID", reader));
if (String.IsNullOrEmpty(albumidstring))
{
albumid = 0;
}
else { albumid = int.Parse(albumidstring); }
artistidstring = GetDBString("ArtistID", reader);
if(String.IsNullOrEmpty(artistidstring)) { artistid = 0; }
else { artistid = int.Parse(artistidstring); }
}
reader.Close();
int mediatypeid = 0;
string mediatypeQuery = "select MediaTypeId from mediatype where Name = " + track.MediaType;
cmd = new MySqlCommand(mediatypeQuery, SqlConn);
string mediaTypeIdString = cmd.ExecuteScalar() + "";
if(String.IsNullOrEmpty(mediaTypeIdString))
{
return 0;
}
else
{
mediatypeid = int.Parse(mediaTypeIdString);
}
int genreId=0;
string genreIdQuery = "select mediatypeid from mediatype where Name = " + track.MediaType;
cmd = new MySqlCommand(genreIdQuery, SqlConn);
string genreIdString = cmd.ExecuteScalar() + "";
if (String.IsNullOrEmpty(genreIdString))
{
return 0;
}
else
{
genreId = int.Parse(genreIdString);
}
if (artistid == 0 || albumid == 0)
{
return 0;
}
string insert = "insert into track(TrackId,Name,AlbumId,MediaTypeId,GenreId,Composer,Milliseconds,Bytes,UnitPrice) "
+ "VALUES (" + nextNum + ",\"" + track.TrackName + "\"," + albumid + "," + mediatypeid + "," + genreId + ",\"" + track.Composer +
"\"," + track.Milliseconds + "," + track.Bytes + "," + track.UnitPrice + ")";
cmd = new MySqlCommand(insert, SqlConn);
cmd.ExecuteNonQuery();
return nextNum;
}
else
{
return 0;
}
}
public int AddArtist(Artist artist)
{
bool open = this.OpenConnection();
if(open == true)
{
string lastArtistQuery = "select ArtistId from artist order by ArtistId desc limit 1";
MySqlCommand cmd = new MySqlCommand(lastArtistQuery, SqlConn);
int nextNum = int.Parse(cmd.ExecuteScalar() + "") + 1;
string insert = "insert into artist(ArtistId,Name) VALUES (" + nextNum + ",\"" + artist.Name + "\")";
cmd = new MySqlCommand(insert, SqlConn);
cmd.ExecuteNonQuery();
return nextNum;
}
else
{
return 0;
}
}
public int AddGenre(string name)
{
bool open = this.OpenConnection();
if(open == true)
{
string lastArtistQuery = "select GenreId from genre order by GenreId desc limit 1";
MySqlCommand cmd = new MySqlCommand(lastArtistQuery, SqlConn);
int nextNum = int.Parse(cmd.ExecuteScalar() + "") + 1;
string insertGenre = "insert into Genre(GenreId,Name) VALUES (" + nextNum + ",\"" + name + "\")";
return nextNum;
}
else
{
return 0;
}
}
public int AddMediaType(string name)
{
bool open = this.OpenConnection();
if (open == true)
{
string lastArtistQuery = "select MediaTypeId from MediaType order by MediaTypeId desc limit 1";
MySqlCommand cmd = new MySqlCommand(lastArtistQuery, SqlConn);
int nextNum = int.Parse(cmd.ExecuteScalar() + "") + 1;
string insertGenre = "insert into MediaType(MediaTypeId,Name) VALUES (" + nextNum + ",\"" + name + "\")";
return nextNum;
}
else
{
return 0;
}
}
public int addAlbum(Album album)
{
bool open = this.OpenConnection();
if(open == true)
{
string lastArtistQuery = "select AlbumId from album order by AlbumId desc limit 1";
MySqlCommand cmd = new MySqlCommand(lastArtistQuery, SqlConn);
int nextNum = int.Parse(cmd.ExecuteScalar() + "") + 1;
int artistId = 0;
string getArtistIdQuery = "select ArtistId from artist where name = " + album.Artist;
cmd = new MySqlCommand(getArtistIdQuery, SqlConn);
string idString = cmd.ExecuteScalar() + "";
if(String.IsNullOrEmpty(idString)) { return 0; }
else { artistId = int.Parse(idString); }
string insert = "insert into album(AlbumId,Title,ArtistId) VALUES (" + nextNum + ",\"" + album.Title + "\"," + idString + ")";
cmd = new MySqlCommand(insert, SqlConn);
cmd.ExecuteNonQuery();
return nextNum;
}
else
{
return 0;
}
}
public int addToPlaylist(int trackid, int playlistid)
{
bool connect = this.OpenConnection();
if(connect == true)
{
string insert = "INSERT INTO PlaylistTrack (PlaylistId,TrackId) VALUES (" + playlistid + "," + trackid + ")";
MySqlCommand command = new MySqlCommand(insert, SqlConn);
command.ExecuteNonQuery();
return 0;
}
else
{
return 1;
}
}
public int addToCustomPlaylist(int trackid, int playlistid)
{
bool connect = this.OpenConnection();
if (connect == true)
{
string insert = "INSERT INTO MyPlaylistTrack (PlaylistId,TrackId) VALUES (" + playlistid + "," + trackid + ")";
MySqlCommand command = new MySqlCommand(insert, SqlConn);
command.ExecuteNonQuery();
return 0;
}
else
{
return 1;
}
}
public int removeFromCustomPlaylist(int trackid, int playlistid)
{
bool connect = this.OpenConnection();
if (connect == true)
{
string insert = "DELETE FROM MyPlaylistTrack WHERE PlaylistId = " + playlistid + " AND TrackId = " + trackid;
MySqlCommand command = new MySqlCommand(insert, SqlConn);
command.ExecuteNonQuery();
return 0;
}
else
{
return 1;
}
}
public int removeFromPlaylist(int trackid, int playlistid)
{
bool connect = this.OpenConnection();
if (connect == true)
{
string insert = "DELETE FROM PlaylistTrack WHERE PlaylistId = " + playlistid + " AND TrackId = " + trackid;
MySqlCommand command = new MySqlCommand(insert, SqlConn);
command.ExecuteNonQuery();
return 0;
}
else
{
return 1;
}
}
public int createOrder(int custId)
{
bool open = this.OpenConnection();
if(open == true)
{
string insert = "INSERT INTO Orders (CustomerId) VALUES (" + custId + ")";
MySqlCommand command = new MySqlCommand(insert, SqlConn);
command.ExecuteNonQuery();
string pk_query = "SELECT LAST_INSERT_ID()";
command = new MySqlCommand(pk_query, SqlConn);
int newOrderID = int.Parse(command.ExecuteScalar() + "");
return newOrderID;
}
else
{
return 0;
}
}
public int createInvoice(int custId, int payId, int orderId)
{
bool open = this.OpenConnection();
if(open == true)
{
//first get all of the customer info
string personQuery = "select person.Address as billAdr, " +
"person.City as billCity, " +
"person.State as billState, " +
"person.Country as billCountry, " +
"person.PostalCode as billPost " +
"from person " +
"left join customer on customer.PersonID = person.PersonId " +
"where customer.CustomerId = " + custId;
MySqlCommand cmd = new MySqlCommand(personQuery, SqlConn);
MySqlDataReader reader = cmd.ExecuteReader();
string Address = "", City = "", State="", Country="", PostalCode = "";
while (reader.Read())
{
Address = GetDBString("billAdr", reader);
City = GetDBString("billCity", reader);
State = GetDBString("billState", reader);
Country = GetDBString("billCountry", reader);
PostalCode = GetDBString("billPost", reader);
}
reader.Close();
//get the order total
float total = 0;
string costQuery = "Select UnitPrice from track left join ordertracks on track.trackid = ordertracks.trackid where orderId = " + orderId;
cmd = new MySqlCommand(costQuery, SqlConn);
reader = cmd.ExecuteReader();
while(reader.Read())
{
total = total + float.Parse(GetDBString("UnitPrice", reader));
}
reader.Close();
//get the next number for invoiceId
string nextInvoiceQuery = "Select invoiceid from invoice order by invoiceid desc limit 1";
cmd = new MySqlCommand(nextInvoiceQuery, SqlConn);
int nextInvoice = int.Parse(cmd.ExecuteScalar() + "") + 1;
//get current date time
DateTime dateValue = DateTime.Now;
string NowTime = dateValue.ToString("yyyy-MM-dd HH:mm:ss");
//now do the insert
string insert = "Insert into invoice (invoiceid, customerid, invoicedate, billingaddress, billingcity, billingstate, billingcountry, billingpostalcode, total, payid) " +
"VALUES " +
"(" + nextInvoice + "," + custId + ",\"" + NowTime + "\",\"" + Address + "\",\"" + City + "\",\"" + State + "\",\"" + Country + "\",\"" + PostalCode + "\"," + total + "," + payId + ")";
cmd = new MySqlCommand(insert, SqlConn);
cmd.ExecuteNonQuery();
//NEED TO DELETE THE ORDER, AND ORDER TRACKS
string delete_ordertracks = "delete from ordertracks where orderid = " + orderId;
cmd = new MySqlCommand(delete_ordertracks, SqlConn);
cmd.ExecuteNonQuery();
string delete_order = "delete from orders where orderid = " + orderId;
cmd = new MySqlCommand(delete_order, SqlConn);
cmd.ExecuteNonQuery();
return nextInvoice;
}
else
{
return 0;
}
}
public List<Invoice> getInvoices(int custId)
{
List<Invoice> invList = new List<Invoice>();
bool open = this.OpenConnection();
if(open == true)
{
string query = "SELECT invoice.invoiceid, invoice.customerid, invoice.invoicedate, invoice.billingaddress, invoice.billingcity, " +
"invoice.billingstate, invoice.billingcountry, invoice.billingpostalcode, invoice.total, invoice.payid, payment.payId, " +
"payment.IsDefault, applepay.ApplePayToken, googlepay.GoogleToken, googlepay.GoogleEmail, creditcard.CreditCardNumber, " +
"creditcard.ExpirationDate " +
"from invoice " +
"left join payment on invoice.payid = payment.payid " +
"left join applepay on invoice.payid = applepay.PayId " +
"left join googlepay on invoice.payid = googlepay.PayId " +
"left join creditcard on invoice.payid = creditcard.PayId " +
//"where invoice.InvoiceId = " + custId;
"where invoice.customerId = " + custId;
MySqlCommand cmd = new MySqlCommand(query, SqlConn);
MySqlDataReader reader = cmd.ExecuteReader();
string Correct_Token;
while (reader.Read())
{
string appleToken = GetDBString("ApplePayToken", reader);
string googleToken = GetDBString("GoogleToken", reader);
if(String.IsNullOrEmpty(appleToken))
{
Correct_Token = googleToken;
}
else
{
Correct_Token = appleToken;
}
int payid = 0, IsDef = 0;
string EmptyPayId = GetDBString("payId", reader);
if(String.IsNullOrEmpty(EmptyPayId))
{
payid = 0;
}
else
{
payid = int.Parse(EmptyPayId);
}
string EmptyDefault = GetDBString("IsDefault", reader);
if(String.IsNullOrEmpty(EmptyDefault))
{
IsDef = 0;
}
else
{
IsDef = int.Parse(EmptyDefault);
}
Payment LoadPayment = new Payment
{
PayId = payid,
is_default = IsDef,
token = Correct_Token,
email = GetDBString("GoogleEmail", reader),
cardnum = GetDBString("CreditCardNumber", reader),
expr_date = GetDBString("ExpirationDate", reader)
};
invList.Add(new Invoice
{
invoiceId = int.Parse(GetDBString("invoiceid", reader)),
customerId = int.Parse(GetDBString("customerid", reader)),
invoiceDate = GetSqlDate("invoicedate", reader),
address = GetDBString("billingaddress", reader),
city = GetDBString("billingcity", reader),
state = GetDBString("billingstate", reader),
country = GetDBString("billingcountry", reader),
post = GetDBString("billingpostalcode", reader),
total = float.Parse(GetDBString("total", reader)),
payment = LoadPayment
/*payment = new Payment
{
PayId = int.Parse(GetDBString("payId", reader)),
is_default = int.Parse(GetDBString("IsDefault", reader)),
token = Correct_Token,
email = GetDBString("GoogleEmail", reader),
cardnum = GetDBString("CreditCardNumber", reader),
expr_date = GetDBString("ExpirationDate", reader)
}*/
});
}
}
return invList;
}
/// <summary>
/// adds a payment type to the database
/// </summary>
/// <param name="payment">an instance of the Payment Model</param>
/// <returns>0 on success, 1 on error</returns>
public int AddPayment(Payment payment)
{
bool open = this.OpenConnection();
if (open == true)
{
string new_payment = "insert into chinook.payment(CustomerId,IsDefault) VALUES (" + payment.CustomerId + "," + payment.is_default + ")";
MySqlCommand command = new MySqlCommand(new_payment, SqlConn);
command.ExecuteNonQuery();
//now we need to get the primary key from that recent update
string pk_query = "SELECT LAST_INSERT_ID()";
command = new MySqlCommand(pk_query, SqlConn);
string newPayId = command.ExecuteScalar() + "";
string PayTypeInsert;
if (payment.Type == "CC")
{
PayTypeInsert = "insert into creditcard(PayId,CreditCardNumber,ExpirationDate) VALUES (" + newPayId + "," +
payment.cardnum + ",\"" + payment.expr_date + "\")";
}
else if (payment.Type == "AP")
{
PayTypeInsert = "insert into applepay(PayId,ApplePayToken) VALUES (" + newPayId + ",\"" +
payment.token + "\")";
}
else if (payment.Type == "GP")
{
PayTypeInsert = "insert into googlepay(PayId,GoogleEmail,GoogleToken) VALUES (" + newPayId + ",\"" +
payment.email + "\",\"" + payment.token + "\")";
}
else
{
return 1;
}
command = new MySqlCommand(PayTypeInsert, SqlConn);
command.ExecuteNonQuery();
}
return 0;
}
public int AddTrackOrer(int OrderId, int TrackId)
{
bool open = this.OpenConnection();
if (open == true)
{
string insert = "INSERT INTO ordertracks (OrderId,TrackId) VALUES (" + OrderId + "," + TrackId + ")";
MySqlCommand command = new MySqlCommand(insert, SqlConn);
command.ExecuteNonQuery();
return 0;
}
else
{
return 1;
}
}
public List<Track> getOrderTracks(int orderId)
{
List <Track> trackList = new List<Track>();
bool open = this.OpenConnection();
if(open == true)
{
string query = "select track.TrackId as TrackID, track.Name as trackname,track.Composer as trackcomposer, " +
"track.Milliseconds,track.Bytes, track.UnitPrice, Album.Title as albumtitle,MediaType.Name as mediatype, artist.name as artist, " +
"Genre.Name as genre " +
"from track " +
"left join ordertracks on track.TrackId = ordertracks.trackid " +
"left join Album on track.AlbumId = Album.AlbumId " +
"left join mediatype on track.MediaTypeId=mediatype.MediaTypeId " +
"left join genre on track.GenreId = genre.GenreId " +
"left join artist on album.artistid = artist.artistid " +
"where ordertracks.orderid = " + orderId;
MySqlCommand cmd = new MySqlCommand(query, SqlConn);
MySqlDataReader reader = cmd.ExecuteReader();
Track track;
while (reader.Read())
{
track = new Track();
track.TrackId = int.Parse(GetDBString("TrackId", reader));
track.TrackName = GetDBString("trackname", reader);
track.Composer = GetDBString("trackcomposer", reader);
track.Milliseconds = int.Parse(GetDBString("Milliseconds", reader));
track.Bytes = int.Parse(GetDBString("Bytes", reader));
track.UnitPrice = float.Parse(GetDBString("UnitPrice", reader));
track.AlbumTitle = GetDBString("albumtitle", reader);
track.MediaType = GetDBString("mediatype", reader);
track.Genre = GetDBString("genre", reader);
track.artist = GetDBString("artist", reader);
trackList.Add(track);
}
}
return trackList;
}
public List<int> customerOrders(int custId)
{
List<int> id_list = new List<int>();
bool open = this.OpenConnection();
if(open == true)
{
string query = "SELECT OrderId from orders where CustomerId = " + custId;
MySqlCommand cmd = new MySqlCommand(query, SqlConn);
MySqlDataReader reader = cmd.ExecuteReader();
while(reader.Read())
{
id_list.Add(int.Parse(GetDBString("OrderId", reader)));
}
}
CloseConnection();
return id_list;
}
/// <summary>
/// Update a Customer Object
/// </summary>
/// <param name="customer">A customer object</param>
/// <returns>0 success, 1 otherwise</returns>
public int UpdateCustomer(Customer customer)
{
string update_person = "Update person SET FirstName=\'" + customer.FName + "\', LastName=\'" + customer.LName +
"\', Address=\'" + customer.Address + "\', City=\'" + customer.City + "\', State=\'" + customer.State +
"\', Country=\'" + customer.Country + "\', PostalCode=\'" + customer.Post + "\', Phone=\'" +
customer.Phone + "\', Fax=\'" + customer.Fax + "\', Email=\'" + customer.Email + "\' WHERE PersonId=\'" +
customer.PersonID + "\'";
string update_customer = "Update customer set Company=\'" + customer.Company + "\', SupportRepID=\'" +
customer.SupportRepId + "\' WHERE CustomerId =\'" + customer.CustomerID + "\'";
Debug.WriteLine(update_person);
Debug.WriteLine(update_customer);
bool open = this.OpenConnection();
if (open == true)
{
MySqlCommand command = new MySqlCommand(update_person, SqlConn);
command.ExecuteNonQuery();
command = new MySqlCommand(update_customer, SqlConn);
command.ExecuteNonQuery();
this.CloseConnection();
return 1;
}
else
{
return 0;
}
}
/// <summary>
/// Gets a Customer from the DB
/// </summary>
/// <param name="PersonID">a personID related to the customer</param>
/// <returns>A customer object</returns>
public Customer GetCustomer(int PersonID)
{
bool open = this.OpenConnection();
Customer customer = new Customer();
if (open == true)
{
string customer_query = "select * from `person` left join `customer` on person.PersonId=customer.PersonID where Customer.CustomerID = " + PersonID.ToString();
MySqlCommand cmd = new MySqlCommand(customer_query, SqlConn);
MySqlDataReader reader = cmd.ExecuteReader();
while (reader.Read())
{
customer.FName = GetDBString("FirstName", reader);
customer.LName = GetDBString("LastName", reader);
customer.CustomerID = int.Parse(GetDBString("CustomerID", reader));
customer.Address = GetDBString("Address", reader);
customer.City = GetDBString("City", reader);
customer.State = GetDBString("State", reader);
customer.Post = GetDBString("PostalCode", reader);
customer.Country = GetDBString("Country", reader);
customer.Phone = GetDBString("Phone", reader);
customer.Fax = GetDBString("Fax", reader);
customer.Email = GetDBString("Email", reader);
customer.Company = GetDBString("Company", reader);
customer.SupportRepId = int.Parse(GetDBString("SupportRepId", reader));
customer.PersonID = int.Parse(GetDBString("PersonID", reader));
}
return customer;
}
else
{
return customer;
}
}
/// <summary>
/// Searches the Database
/// </summary>
/// <param name="search">a search object parameterized by tags from the user</param>
/// <returns>a SearchResult object</returns>
public SearchResult Search(Search search)
{
bool open = this.OpenConnection();
SearchResult searchresult = new SearchResult();
if (open == true)
{
//media / album / artist / track / composer / genre
//do the search
//need to write some logic to see any of the fields are blank, otherwise do each search, and add them to the lists in result
Dictionary<string, string> queries = new Dictionary<string, string>();
string mediaQuery = "select track.TrackId as trackid,track.Name as trackname,track.Composer as trackcomposer,track.Milliseconds,track.Bytes,track.UnitPrice,"
+ "Album.Title as albumtitle,MediaType.Name as mediatype,Genre.Name as genre, artist.Name as artist "
+ "from track left join Album on track.AlbumId = Album.AlbumId left join mediatype on track.MediaTypeId=mediatype.MediaTypeId left join genre on track.GenreId = genre.GenreId left join artist on album.ArtistID = artist.ArtistID "
+ "where MediaType.Name like \'%" + search.Media + "%\'";
queries.Add("Media", mediaQuery);
string albumQuery = "select track.TrackId as trackid,track.Name as trackname,track.Composer as trackcomposer,track.Milliseconds,track.Bytes,track.UnitPrice,"
+ "Album.Title as albumtitle,MediaType.Name as mediatype,Genre.Name as genre, artist.Name as artist "
+ "from track left join Album on track.AlbumId = Album.AlbumId left join mediatype on track.MediaTypeId=mediatype.MediaTypeId left join genre on track.GenreId = genre.GenreId left join artist on album.ArtistID = artist.ArtistID "
+ "where album.Title like \'%" + search.Album + "%\'";
queries.Add("Album", albumQuery);
string artistQuery = "select track.TrackId as trackid,track.Name as trackname,track.Composer as trackcomposer,track.Milliseconds,track.Bytes,track.UnitPrice,"
+ "Album.Title as albumtitle,MediaType.Name as mediatype,Genre.Name as genre, artist.Name as artist "
+ "from track left join Album on track.AlbumId = Album.AlbumId left join mediatype on track.MediaTypeId=mediatype.MediaTypeId left join genre on track.GenreId = genre.GenreId left join artist on album.ArtistID = artist.ArtistID "
+ "where artist.Name like \'%" + search.Artist + "%\'";
queries.Add("Artist", artistQuery);
string trackQuery = "select track.TrackId as trackid,track.Name as trackname,track.Composer as trackcomposer,track.Milliseconds,track.Bytes,track.UnitPrice,"
+ "Album.Title as albumtitle,MediaType.Name as mediatype,Genre.Name as genre, artist.Name as artist "
+ "from track left join Album on track.AlbumId = Album.AlbumId left join mediatype on track.MediaTypeId=mediatype.MediaTypeId left join genre on track.GenreId = genre.GenreId left join artist on album.ArtistID = artist.ArtistID "
+ "where track.Name like \'%" + search.Track + "%\'";
queries.Add("Track", trackQuery);
string composerQuery = "select track.TrackId as trackid,track.Name as trackname,track.Composer as trackcomposer,track.Milliseconds,track.Bytes,track.UnitPrice,"
+ "Album.Title as albumtitle,MediaType.Name as mediatype,Genre.Name as genre, artist.Name as artist "
+ "from track left join Album on track.AlbumId = Album.AlbumId left join mediatype on track.MediaTypeId=mediatype.MediaTypeId left join genre on track.GenreId = genre.GenreId left join artist on album.ArtistID = artist.ArtistID "
+ "where track.Composer like \'%" + search.Composer + "%\'";
queries.Add("Composer", composerQuery);
string genreQuery = "select track.TrackId as trackid,track.Name as trackname,track.Composer as trackcomposer,track.Milliseconds,track.Bytes,track.UnitPrice,"
+ "Album.Title as albumtitle,MediaType.Name as mediatype,Genre.Name as genre, artist.Name as artist "
+ "from track left join Album on track.AlbumId = Album.AlbumId left join mediatype on track.MediaTypeId=mediatype.MediaTypeId left join genre on track.GenreId = genre.GenreId left join artist on album.ArtistID = artist.ArtistID "
+ "where Genre.Name like \'%" + search.Genre + "%\'";
queries.Add("Genre", genreQuery);
//declare theresult and init it
//SearchResult searchresult = new SearchResult();
//declare the cmd and the reader
//MySqlCommand cmd;
foreach (var key in queries)
{
MySqlCommand cmd = new MySqlCommand(key.Value, SqlConn);
MySqlDataReader reader;
reader = cmd.ExecuteReader();
while (reader.Read())
{
if (search.GetType().GetProperty(key.Key).GetValue(search).ToString() != "")
{
if (key.Key == "Media")
{
searchresult.Media.Add(new Track
{
TrackId = int.Parse(GetDBString("TrackId", reader)),
TrackName = GetDBString("trackname", reader),
Composer = GetDBString("trackcomposer", reader),
Milliseconds = int.Parse(GetDBString("Milliseconds", reader)),
Bytes = int.Parse(GetDBString("Bytes", reader)),
UnitPrice = float.Parse(GetDBString("UnitPrice", reader)),
AlbumTitle = GetDBString("albumtitle", reader),
MediaType = GetDBString("mediatype", reader),
Genre = GetDBString("genre", reader),
artist = GetDBString("artist",reader)
});
}
else if (key.Key == "Album")
{
searchresult.Album.Add(new Track
{
TrackId = int.Parse(GetDBString("TrackId", reader)),
TrackName = GetDBString("trackname", reader),
Composer = GetDBString("trackcomposer", reader),
Milliseconds = int.Parse(GetDBString("Milliseconds", reader)),
Bytes = int.Parse(GetDBString("Bytes", reader)),
UnitPrice = float.Parse(GetDBString("UnitPrice", reader)),
AlbumTitle = GetDBString("albumtitle", reader),
MediaType = GetDBString("mediatype", reader),
Genre = GetDBString("genre", reader),
artist = GetDBString("artist", reader)
});
}
else if (key.Key == "Artist")
{
searchresult.Artist.Add(new Track
{
TrackId = int.Parse(GetDBString("TrackId", reader)),
TrackName = GetDBString("trackname", reader),
Composer = GetDBString("trackcomposer", reader),
Milliseconds = int.Parse(GetDBString("Milliseconds", reader)),
Bytes = int.Parse(GetDBString("Bytes", reader)),
UnitPrice = float.Parse(GetDBString("UnitPrice", reader)),
AlbumTitle = GetDBString("albumtitle", reader),
MediaType = GetDBString("mediatype", reader),
Genre = GetDBString("genre", reader),
artist = GetDBString("artist", reader)
});
}
else if (key.Key == "Track")
{
searchresult.Track.Add(new Track
{
TrackId = int.Parse(GetDBString("TrackId", reader)),
TrackName = GetDBString("trackname", reader),
Composer = GetDBString("trackcomposer", reader),
Milliseconds = int.Parse(GetDBString("Milliseconds", reader)),
Bytes = int.Parse(GetDBString("Bytes", reader)),
UnitPrice = float.Parse(GetDBString("UnitPrice", reader)),
AlbumTitle = GetDBString("albumtitle", reader),
MediaType = GetDBString("mediatype", reader),
Genre = GetDBString("genre", reader),
artist = GetDBString("artist", reader)
});
}
else if (key.Key == "Composer")
{
searchresult.Composer.Add(new Track
{
TrackId = int.Parse(GetDBString("TrackId", reader)),
TrackName = GetDBString("trackname", reader),
Composer = GetDBString("trackcomposer", reader),
Milliseconds = int.Parse(GetDBString("Milliseconds", reader)),
Bytes = int.Parse(GetDBString("Bytes", reader)),
UnitPrice = float.Parse(GetDBString("UnitPrice", reader)),
AlbumTitle = GetDBString("albumtitle", reader),
MediaType = GetDBString("mediatype", reader),
Genre = GetDBString("genre", reader),
artist = GetDBString("artist", reader)
});
}
else if (key.Key == "Genre")
{
searchresult.Genre.Add(new Track
{
TrackId = int.Parse(GetDBString("TrackId", reader)),
TrackName = GetDBString("trackname", reader),
Composer = GetDBString("trackcomposer", reader),
Milliseconds = int.Parse(GetDBString("Milliseconds", reader)),
Bytes = int.Parse(GetDBString("Bytes", reader)),
UnitPrice = float.Parse(GetDBString("UnitPrice", reader)),
AlbumTitle = GetDBString("albumtitle", reader),
MediaType = GetDBString("mediatype", reader),
Genre = GetDBString("genre", reader),
artist = GetDBString("artist", reader)
});
}
}
}
reader.Close();
}
this.CloseConnection();
//result = searchresult;
return searchresult;
}
else
{
return searchresult;
}
}
public int NewCustomPlaylist(CustomPlaylistId playlist)
{
bool open = this.OpenConnection();
if(open == true)
{
string newInsert = "insert into myplaylist(Name,CustomerId) VALUES(\"" + playlist.Name + "\"," + playlist.CustomerId + ")";
MySqlCommand command = new MySqlCommand(newInsert, SqlConn);
command.ExecuteNonQuery();
//now we need to get the primary key from that recent update
string pk_query = "SELECT LAST_INSERT_ID()";
command = new MySqlCommand(pk_query, SqlConn);
string newCustomPlaylistId = command.ExecuteScalar() + "";
try
{
return int.Parse(newCustomPlaylistId);
}
catch(Exception e)
{
return 0;
}
}
else
{
return 0;
}
}
public int NewPlaylist(string playlistname)
{
bool open = this.OpenConnection();
if (open == true)
{
string lastRowQuery = "select PlaylistId from playlist order by PlaylistId desc limit 1";
MySqlCommand command = new MySqlCommand(lastRowQuery, SqlConn);
int lastId = int.Parse(command.ExecuteScalar() + "");
int nextId = lastId + 1;
string newInsert = "insert into playlist(Name,PlaylistId) VALUES(\"" + playlistname + "\"," + nextId + ")";
command = new MySqlCommand(newInsert, SqlConn);
command.ExecuteNonQuery();
try
{
return nextId;
}
catch (Exception e)
{
return 0;
}
}
else
{
return 0;
}
}
public int DropCustomPlaylist(int pid)
{
bool open = this.OpenConnection();
if(open == true)
{
string dropCommand = "Delete from myplaylist where PlaylistId = " + pid;
MySqlCommand command = new MySqlCommand(dropCommand, SqlConn);
command.ExecuteNonQuery();
return 1;
}
else
{
return 0;
}
}
public int DropPlaylist(int pid)
{
bool open = this.OpenConnection();
if (open == true)
{
string dropCommand = "Delete from playlist where PlaylistId = " + pid;
MySqlCommand command = new MySqlCommand(dropCommand, SqlConn);
command.ExecuteNonQuery();
return 1;
}
else
{
return 0;
}
}
public List<Payment> GetPayTypes(int customerId)
{
List<Payment> payList = new List<Payment>();
bool open = this.OpenConnection();
if(open == true)
{
string query = "select payment.PayId as PayId,payment.CustomerId as CustomerID, applepay.ApplePayToken as AppleToken, "
+ "googlepay.GoogleToken as GoogleToken, googlepay.GoogleEmail as GoogleEmail, creditcard.CreditCardNumber as CardNum, "
+ "creditcard.ExpirationDate as ExprDate, payment.IsDefault as IsDefault "
+ "from chinook.payment left join googlepay on payment.PayId = googlepay.PayId "
+ "left join applepay on payment.PayId = applepay.PayId left join creditcard on creditcard.PayId = payment.PayId "
+ "where CustomerId = " + customerId;
MySqlCommand command = new MySqlCommand(query, SqlConn);
MySqlDataReader reader = command.ExecuteReader();
Payment newPayment;
while (reader.Read())
{
newPayment = new Payment();
//change token, type with logic
newPayment.CustomerId = int.Parse(GetDBString("CustomerID", reader));
newPayment.PayId = int.Parse(GetDBString("PayId", reader));
string is_default = GetDBString("IsDefault", reader);
string appleToken = GetDBString("AppleToken", reader);
string googleToken = GetDBString("GoogleToken", reader);
string googleEmail = GetDBString("GoogleEmail", reader);
string cardNum = GetDBString("CardNum", reader);
string exprDate = GetDBString("ExprDate", reader);
if(is_default == "True")
{
newPayment.is_default = 1;
}
else
{
newPayment.is_default = 0;
}
if (cardNum != "")
{
newPayment.Type = "CC";
newPayment.cardnum = cardNum;
newPayment.expr_date = exprDate;
}
else if (googleToken != "")
{
newPayment.Type = "GP";
newPayment.email = googleEmail;
newPayment.token = googleToken;
}
else if (appleToken != "")
{
newPayment.Type = "AP";
newPayment.token = appleToken;
}
payList.Add(newPayment);
}
}
return payList;
}
/// <summary>
/// Get A preformed playlist
/// </summary>
/// <param name="PlaylistID">ID of a preformed playlist</param>
/// <returns>List of tracks</returns>
public List<Track> GetPlayListTracks(int PlaylistID)
{
List<Track> tracklist = new List<Track>();
bool open = this.OpenConnection();
if(open == true)
{
string query = "select track.TrackId as TrackID, track.Name as trackname,track.Composer as trackcomposer, " +
"track.Milliseconds,track.Bytes, track.UnitPrice, Album.Title as albumtitle,MediaType.Name as mediatype, artist.name as artist, " +
"Genre.Name as genre " +
"from track " +
"left join playlisttrack on track.TrackId = playlisttrack.trackid " +
"left join playlist on playlist.PlaylistId = playlisttrack.PlaylistId " +
"left join Album on track.AlbumId = Album.AlbumId " +
"left join mediatype on track.MediaTypeId=mediatype.MediaTypeId " +
"left join genre on track.GenreId = genre.GenreId " +
"left join artist on album.artistid = artist.artistid " +
"where playlist.PlaylistId = " + PlaylistID;
MySqlCommand cmd = new MySqlCommand(query, SqlConn);
MySqlDataReader reader = cmd.ExecuteReader();
Track track;
while(reader.Read())
{
track = new Track();
track.TrackId = int.Parse(GetDBString("TrackId", reader));
track.TrackName = GetDBString("trackname", reader);
track.Composer = GetDBString("trackcomposer", reader);
track.Milliseconds = int.Parse(GetDBString("Milliseconds", reader));
track.Bytes = int.Parse(GetDBString("Bytes", reader));
track.UnitPrice = float.Parse(GetDBString("UnitPrice", reader));
track.AlbumTitle = GetDBString("albumtitle", reader);
track.MediaType = GetDBString("mediatype", reader);
track.Genre = GetDBString("genre", reader);
track.artist = GetDBString("artist", reader);
tracklist.Add(track);
}
}
return tracklist;
}
/// <summary>
/// send it a playlist ID, get a list of tracks
/// </summary>
/// <param name="PlaylistID">ID of a custom playlist</param>
/// <returns>list of tracks</returns>
public List<Track> GetCustomPlayListTracks(int PlaylistID)
{
List<Track> tracklist = new List<Track>();
bool open = this.OpenConnection();
if (open == true)
{
string query = "select track.TrackId as TrackID, track.Name as trackname,track.Composer as trackcomposer, " +
"track.Milliseconds,track.Bytes, track.UnitPrice, Album.Title as albumtitle,MediaType.Name as mediatype, artist.name as artist, " +
"Genre.Name as genre " +
"from track " +
"left join MyPlaylistTrack on track.TrackId = MyPlaylistTrack.trackid " +
"left join MyPlayList on MyPlayList.PlaylistId = MyPlaylistTrack.PlaylistId " +
"left join Album on track.AlbumId = Album.AlbumId " +
"left join mediatype on track.MediaTypeId=mediatype.MediaTypeId " +
"left join genre on track.GenreId = genre.GenreId " +
"left join artist on album.artistid = artist.artistid " +
"where playlist.PlaylistId = " + PlaylistID;
MySqlCommand cmd = new MySqlCommand(query, SqlConn);
MySqlDataReader reader = cmd.ExecuteReader();
Track track;
while (reader.Read())
{
track = new Track();
track.TrackId = int.Parse(GetDBString("TrackId", reader));
track.TrackName = GetDBString("trackname", reader);
track.Composer = GetDBString("trackcomposer", reader);
track.Milliseconds = int.Parse(GetDBString("Milliseconds", reader));
track.Bytes = int.Parse(GetDBString("Bytes", reader));
track.UnitPrice = float.Parse(GetDBString("UnitPrice", reader));
track.AlbumTitle = GetDBString("albumtitle", reader);
track.MediaType = GetDBString("mediatype", reader);
track.Genre = GetDBString("genre", reader);
track.artist = GetDBString("artist", reader);
tracklist.Add(track);
}
}
return tracklist;
}
public List<Playlist> GetPlaylists()
{
List<Playlist> playlistList = new List<Playlist>();
bool open = this.OpenConnection();
if (open == true)
{
string query = "Select * from chinook.playlist";
MySqlCommand cmd = new MySqlCommand(query, SqlConn);
MySqlDataReader reader = cmd.ExecuteReader();
Playlist playlist;
while (reader.Read())
{
playlist = new Playlist();
playlist.PlaylistID = int.Parse(GetDBString("PlaylistId", reader));
playlist.Name = GetDBString("Name", reader);
playlistList.Add(playlist);
}
}
return playlistList;
}
public List<Playlist> GetCustomPlaylist(int CustomerID)
{
List<Playlist> playlistList = new List<Playlist>();
bool open = this.OpenConnection();
if (open == true)
{
string query = "Select * from chinook.myplaylist where CustomerID = " + CustomerID;
MySqlCommand cmd = new MySqlCommand(query, SqlConn);
MySqlDataReader reader = cmd.ExecuteReader();
Playlist playlist;
while (reader.Read())
{
playlist = new Playlist();
playlist.PlaylistID = int.Parse(GetDBString("PlaylistId", reader));
playlist.Name = GetDBString("Name", reader);
playlistList.Add(playlist);
}
}
return playlistList;
}
/// <summary>
/// Gets a track from the DB
/// </summary>
/// <param name="trackId">The TrackID</param>
/// <returns>a track object</returns>
public Track GetTrack(int trackId)
{
Track track = new Track();
bool open = this.OpenConnection();
if (open == true)
{
string query = "select track.TrackId as trackid,track.Name as trackname,track.Composer as trackcomposer,track.Milliseconds,track.Bytes,track.UnitPrice,"
+ "Album.Title as albumtitle,MediaType.Name as mediatype,Genre.Name as genre "
+ "from track left join Album on track.AlbumId = Album.AlbumId left join mediatype on track.MediaTypeId=mediatype.MediaTypeId left join genre on track.GenreId = genre.GenreId "
+ "where track.TrackId = \'" + trackId.ToString() + "\'";
MySqlCommand cmd = new MySqlCommand(query, SqlConn);
MySqlDataReader reader = cmd.ExecuteReader();
while (reader.Read())
{
track.TrackId = int.Parse(GetDBString("TrackId", reader));
track.TrackName = GetDBString("trackname", reader);
track.Composer = GetDBString("trackcomposer", reader);
track.Milliseconds = int.Parse(GetDBString("Milliseconds", reader));
track.Bytes = int.Parse(GetDBString("Bytes", reader));
track.UnitPrice = float.Parse(GetDBString("UnitPrice", reader));
track.AlbumTitle = GetDBString("albumtitle", reader);
track.MediaType = GetDBString("mediatype", reader);
track.Genre = GetDBString("genre", reader);
}
}
else
{
//do a thing
}
return track;
}
public int UpdateTrack(Track track)
{
bool open = this.OpenConnection();
if (open == true)
{
string update_track = "";
MySqlCommand command = new MySqlCommand(update_track, SqlConn);
command.ExecuteNonQuery();
return 0;
}
else
{
return 1;
}
}
} // ADL: I added this ending paren.
}