From 1ab83ce1b7f0cf869d3935669072dc6c2cc76076 Mon Sep 17 00:00:00 2001 From: ANDREW KRISNA FERDINANTO Date: Fri, 15 Mar 2024 16:12:43 +0700 Subject: [PATCH] Commiting the work --- ExamNETIntermediate/Form1.Designer.cs | 335 ++++++++++++++++++++++- ExamNETIntermediate/Form1.cs | 294 ++++++++++++++++++++ ExamNETIntermediate/Form1.resx | 120 ++++++++ ExamNETIntermediate/Models/GenreModel.cs | 15 + ExamNETIntermediate/Models/SongModel.cs | 33 +++ 5 files changed, 793 insertions(+), 4 deletions(-) create mode 100644 ExamNETIntermediate/Form1.resx create mode 100644 ExamNETIntermediate/Models/GenreModel.cs create mode 100644 ExamNETIntermediate/Models/SongModel.cs diff --git a/ExamNETIntermediate/Form1.Designer.cs b/ExamNETIntermediate/Form1.Designer.cs index ece918a..75fdbab 100644 --- a/ExamNETIntermediate/Form1.Designer.cs +++ b/ExamNETIntermediate/Form1.Designer.cs @@ -28,12 +28,339 @@ protected override void Dispose(bool disposing) /// private void InitializeComponent() { - this.components = new System.ComponentModel.Container(); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(800, 450); - this.Text = "Form1"; + songListBox = new ListBox(); + tableLayoutPanel1 = new TableLayoutPanel(); + genreComboBox = new ComboBox(); + titleTextBox = new TextBox(); + artistTextBox = new TextBox(); + TitleLabel = new Label(); + ArtistLabel = new Label(); + GenreLabel = new Label(); + LengthLabel = new Label(); + MinuteNum = new NumericUpDown(); + availableCheckBox = new CheckBox(); + SecondNum = new NumericUpDown(); + IsAvalLabel = new Label(); + releaseDateLabel = new Label(); + releaseDatePicker = new DateTimePicker(); + AddButton = new Button(); + UpdateButton = new Button(); + DeleteBtn = new Button(); + RefreshButton = new Button(); + labelNotif = new Label(); + searchTextBox = new TextBox(); + SearchLabel = new Label(); + lengthSeconds = new Label(); + label1 = new Label(); + label2 = new Label(); + releaseDateAfter = new Label(); + tableLayoutPanel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)MinuteNum).BeginInit(); + ((System.ComponentModel.ISupportInitialize)SecondNum).BeginInit(); + SuspendLayout(); + // + // songListBox + // + songListBox.FormattingEnabled = true; + songListBox.ItemHeight = 15; + songListBox.Location = new Point(40, 67); + songListBox.Name = "songListBox"; + songListBox.Size = new Size(214, 199); + songListBox.TabIndex = 0; + // + // tableLayoutPanel1 + // + tableLayoutPanel1.ColumnCount = 2; + tableLayoutPanel1.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 50F)); + tableLayoutPanel1.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 50F)); + tableLayoutPanel1.Controls.Add(genreComboBox, 1, 2); + tableLayoutPanel1.Controls.Add(titleTextBox, 1, 0); + tableLayoutPanel1.Controls.Add(artistTextBox, 1, 1); + tableLayoutPanel1.Controls.Add(TitleLabel, 0, 0); + tableLayoutPanel1.Controls.Add(ArtistLabel, 0, 1); + tableLayoutPanel1.Controls.Add(GenreLabel, 0, 2); + tableLayoutPanel1.Controls.Add(LengthLabel, 0, 3); + tableLayoutPanel1.Controls.Add(MinuteNum, 1, 3); + tableLayoutPanel1.Controls.Add(availableCheckBox, 1, 5); + tableLayoutPanel1.Controls.Add(SecondNum, 1, 4); + tableLayoutPanel1.Controls.Add(IsAvalLabel, 0, 5); + tableLayoutPanel1.Controls.Add(releaseDateLabel, 0, 6); + tableLayoutPanel1.Controls.Add(releaseDatePicker, 1, 6); + tableLayoutPanel1.Location = new Point(288, 67); + tableLayoutPanel1.Name = "tableLayoutPanel1"; + tableLayoutPanel1.RowCount = 7; + tableLayoutPanel1.RowStyles.Add(new RowStyle(SizeType.Percent, 14.2857141F)); + tableLayoutPanel1.RowStyles.Add(new RowStyle(SizeType.Percent, 14.2857141F)); + tableLayoutPanel1.RowStyles.Add(new RowStyle(SizeType.Percent, 14.2857141F)); + tableLayoutPanel1.RowStyles.Add(new RowStyle(SizeType.Percent, 14.2857141F)); + tableLayoutPanel1.RowStyles.Add(new RowStyle(SizeType.Percent, 14.2857141F)); + tableLayoutPanel1.RowStyles.Add(new RowStyle(SizeType.Percent, 14.2857141F)); + tableLayoutPanel1.RowStyles.Add(new RowStyle(SizeType.Percent, 14.2857141F)); + tableLayoutPanel1.Size = new Size(365, 199); + tableLayoutPanel1.TabIndex = 1; + // + // genreComboBox + // + genreComboBox.FormattingEnabled = true; + genreComboBox.Location = new Point(185, 59); + genreComboBox.Name = "genreComboBox"; + genreComboBox.Size = new Size(120, 23); + genreComboBox.TabIndex = 3; + // + // titleTextBox + // + titleTextBox.Location = new Point(185, 3); + titleTextBox.Name = "titleTextBox"; + titleTextBox.Size = new Size(177, 23); + titleTextBox.TabIndex = 0; + // + // artistTextBox + // + artistTextBox.Location = new Point(185, 31); + artistTextBox.Name = "artistTextBox"; + artistTextBox.Size = new Size(177, 23); + artistTextBox.TabIndex = 1; + // + // TitleLabel + // + TitleLabel.AutoSize = true; + TitleLabel.Location = new Point(3, 0); + TitleLabel.Name = "TitleLabel"; + TitleLabel.Size = new Size(29, 15); + TitleLabel.TabIndex = 7; + TitleLabel.Text = "Title"; + // + // ArtistLabel + // + ArtistLabel.AutoSize = true; + ArtistLabel.Location = new Point(3, 28); + ArtistLabel.Name = "ArtistLabel"; + ArtistLabel.Size = new Size(35, 15); + ArtistLabel.TabIndex = 8; + ArtistLabel.Text = "Artist"; + // + // GenreLabel + // + GenreLabel.AutoSize = true; + GenreLabel.Location = new Point(3, 56); + GenreLabel.Name = "GenreLabel"; + GenreLabel.Size = new Size(38, 15); + GenreLabel.TabIndex = 9; + GenreLabel.Text = "Genre"; + // + // LengthLabel + // + LengthLabel.AutoSize = true; + LengthLabel.Location = new Point(3, 84); + LengthLabel.Name = "LengthLabel"; + LengthLabel.Size = new Size(44, 15); + LengthLabel.TabIndex = 10; + LengthLabel.Text = "Length"; + // + // MinuteNum + // + MinuteNum.Location = new Point(185, 87); + MinuteNum.Name = "MinuteNum"; + MinuteNum.Size = new Size(120, 23); + MinuteNum.TabIndex = 11; + // + // availableCheckBox + // + availableCheckBox.AutoSize = true; + availableCheckBox.Location = new Point(185, 143); + availableCheckBox.Name = "availableCheckBox"; + availableCheckBox.Size = new Size(98, 19); + availableCheckBox.TabIndex = 6; + availableCheckBox.Text = "Is it available?"; + availableCheckBox.UseVisualStyleBackColor = true; + // + // SecondNum + // + SecondNum.Location = new Point(185, 115); + SecondNum.Name = "SecondNum"; + SecondNum.Size = new Size(120, 23); + SecondNum.TabIndex = 12; + // + // IsAvalLabel + // + IsAvalLabel.AutoSize = true; + IsAvalLabel.Location = new Point(3, 140); + IsAvalLabel.Name = "IsAvalLabel"; + IsAvalLabel.Size = new Size(79, 15); + IsAvalLabel.TabIndex = 13; + IsAvalLabel.Text = "Is it available?"; + // + // releaseDateLabel + // + releaseDateLabel.AutoSize = true; + releaseDateLabel.Location = new Point(3, 168); + releaseDateLabel.Name = "releaseDateLabel"; + releaseDateLabel.Size = new Size(73, 15); + releaseDateLabel.TabIndex = 14; + releaseDateLabel.Text = "Release Date"; + // + // releaseDatePicker + // + releaseDatePicker.Location = new Point(185, 171); + releaseDatePicker.Name = "releaseDatePicker"; + releaseDatePicker.Size = new Size(177, 23); + releaseDatePicker.TabIndex = 15; + // + // AddButton + // + AddButton.Location = new Point(473, 273); + AddButton.Name = "AddButton"; + AddButton.Size = new Size(75, 23); + AddButton.TabIndex = 2; + AddButton.Text = "Add"; + AddButton.UseVisualStyleBackColor = true; + AddButton.Click += AddButton_Click; + // + // UpdateButton + // + UpdateButton.Location = new Point(473, 302); + UpdateButton.Name = "UpdateButton"; + UpdateButton.Size = new Size(75, 23); + UpdateButton.TabIndex = 3; + UpdateButton.Text = "Update"; + UpdateButton.UseVisualStyleBackColor = true; + UpdateButton.Click += UpdateButton_Click; + // + // DeleteBtn + // + DeleteBtn.Location = new Point(575, 273); + DeleteBtn.Name = "DeleteBtn"; + DeleteBtn.Size = new Size(75, 23); + DeleteBtn.TabIndex = 4; + DeleteBtn.Text = "Delete"; + DeleteBtn.UseVisualStyleBackColor = true; + DeleteBtn.Click += DeleteBtn_Click; + // + // RefreshButton + // + RefreshButton.Location = new Point(575, 302); + RefreshButton.Name = "RefreshButton"; + RefreshButton.Size = new Size(75, 23); + RefreshButton.TabIndex = 6; + RefreshButton.Text = "Refresh"; + RefreshButton.UseVisualStyleBackColor = true; + RefreshButton.Click += RefreshButton_Click; + // + // labelNotif + // + labelNotif.AutoSize = true; + labelNotif.Location = new Point(290, 52); + labelNotif.Name = "labelNotif"; + labelNotif.Size = new Size(0, 15); + labelNotif.TabIndex = 7; + // + // searchTextBox + // + searchTextBox.Location = new Point(40, 299); + searchTextBox.Name = "searchTextBox"; + searchTextBox.Size = new Size(100, 23); + searchTextBox.TabIndex = 8; + // + // SearchLabel + // + SearchLabel.AutoSize = true; + SearchLabel.Location = new Point(40, 281); + SearchLabel.Name = "SearchLabel"; + SearchLabel.Size = new Size(65, 15); + SearchLabel.TabIndex = 9; + SearchLabel.Text = "Search Box"; + // + // lengthSeconds + // + lengthSeconds.AutoSize = true; + lengthSeconds.Location = new Point(659, 158); + lengthSeconds.Name = "lengthSeconds"; + lengthSeconds.Size = new Size(41, 15); + lengthSeconds.TabIndex = 10; + lengthSeconds.Text = "length"; + // + // label1 + // + label1.AutoSize = true; + label1.Font = new Font("Segoe UI", 9F, FontStyle.Bold); + label1.Location = new Point(40, 45); + label1.Name = "label1"; + label1.Size = new Size(95, 15); + label1.TabIndex = 11; + label1.Text = "Song Selections"; + // + // label2 + // + label2.AutoSize = true; + label2.Location = new Point(389, 311); + label2.Name = "label2"; + label2.Size = new Size(38, 15); + label2.TabIndex = 12; + label2.Text = "label2"; + // + // releaseDateAfter + // + releaseDateAfter.AutoSize = true; + releaseDateAfter.Location = new Point(659, 242); + releaseDateAfter.Name = "releaseDateAfter"; + releaseDateAfter.Size = new Size(0, 15); + releaseDateAfter.TabIndex = 13; + // + // Form1 + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(800, 450); + Controls.Add(releaseDateAfter); + Controls.Add(label2); + Controls.Add(label1); + Controls.Add(lengthSeconds); + Controls.Add(SearchLabel); + Controls.Add(searchTextBox); + Controls.Add(labelNotif); + Controls.Add(RefreshButton); + Controls.Add(DeleteBtn); + Controls.Add(UpdateButton); + Controls.Add(AddButton); + Controls.Add(tableLayoutPanel1); + Controls.Add(songListBox); + Name = "Form1"; + Text = "Form1"; + tableLayoutPanel1.ResumeLayout(false); + tableLayoutPanel1.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)MinuteNum).EndInit(); + ((System.ComponentModel.ISupportInitialize)SecondNum).EndInit(); + ResumeLayout(false); + PerformLayout(); } #endregion + + private ListBox songListBox; + private TableLayoutPanel tableLayoutPanel1; + private TextBox titleTextBox; + private TextBox artistTextBox; + private ComboBox genreComboBox; + private Button AddButton; + private Button UpdateButton; + private Button DeleteBtn; + private Label TitleLabel; + private Label ArtistLabel; + private Label GenreLabel; + private Label LengthLabel; + private NumericUpDown MinuteNum; + private CheckBox availableCheckBox; + private NumericUpDown SecondNum; + private Label IsAvalLabel; + private Button RefreshButton; + private Label labelNotif; + private Label releaseDateLabel; + private DateTimePicker releaseDatePicker; + private TextBox searchTextBox; + private Label SearchLabel; + private Label lengthSeconds; + private Label label1; + private Label label2; + private Label releaseDateAfter; } } diff --git a/ExamNETIntermediate/Form1.cs b/ExamNETIntermediate/Form1.cs index 3302c50..1e704f2 100644 --- a/ExamNETIntermediate/Form1.cs +++ b/ExamNETIntermediate/Form1.cs @@ -1,10 +1,304 @@ +using ExamNETIntermediate.Models; +using Newtonsoft.Json; +using Newtonsoft; +using System.Text.Json; +using System.Collections.Generic; +using System.Linq; +using System.Net.Http; + namespace ExamNETIntermediate { public partial class Form1 : Form { + public List Songs { get; set; } = new List(); + public HttpClient RefHttpClient { get; set; } = new HttpClient(); + public List Genres { get; set; } = new List(); public Form1() { InitializeComponent(); + labelNotif.ForeColor = Color.Red; + tableLayoutPanel1.CellBorderStyle = System.Windows.Forms.TableLayoutPanelCellBorderStyle.Single; + PopulateSongList(); + PopulateComboBox(); + } + + public async void PopulateSongList() + { + var response = await RefHttpClient.GetAsync("https://new-dev.accelist.com:10000/api/song"); + response.EnsureSuccessStatusCode(); + + var jsonContent = await response.Content.ReadAsStringAsync(); + + var songs = JsonConvert.DeserializeObject>(jsonContent); + + if (songs != null) + { + Songs = songs; + } + + songListBox.Items.Clear(); + songListBox.Items.AddRange(Songs.ToArray()); + songListBox.DisplayMember = "Title"; + + songListBox.SelectedIndexChanged += SongListBox_SelectedIndexChanged; + } + + public async void PopulateComboBox() + { + var response = await RefHttpClient.GetAsync("https://new-dev.accelist.com:10000/api/genre"); + + response.EnsureSuccessStatusCode(); + var jsonContent = await response.Content.ReadAsStringAsync(); + + var content = JsonConvert.DeserializeObject>(jsonContent); + + if (content != null) + { + Genres = content; + } + genreComboBox.DataSource = Genres; + genreComboBox.DisplayMember = "GenreName"; + } + + private void SongListBox_SelectedIndexChanged(object? sender, EventArgs e) + { + var selectedSong = songListBox.SelectedItem as SongModel; + var selectedGenre = genreComboBox.SelectedItem as GenreModel; + DateTime? releaseDate = releaseDatePicker.Value; + DateTime utcReleaseDate = ((DateTime)releaseDate).ToUniversalTime(); + if (selectedSong != null) + { + string lengthAsString = selectedSong.Length.ToString(); + string releaseDateText = utcReleaseDate.ToString("g"); + titleTextBox.Text = selectedSong.Title; + artistTextBox.Text = selectedSong.Artist; + genreComboBox.SelectedItem = Genres.FirstOrDefault(g => g.GenreName == selectedSong.GenreName); + + //MinuteNum.Maximum = 1440; + //MinuteNum.Value = selectedSong.Length; + + SecondNum.Maximum = 86400; + SecondNum.Value = selectedSong.Length; + + lengthSeconds.Text = $"Duration is {lengthAsString} seconds"; + releaseDatePicker.Value = DateTime.Parse(selectedSong.ReleaseDate); + releaseDateAfter.Text = releaseDateText; + availableCheckBox.Checked = selectedSong.IsAvailable; + + } + } + + public void ClearForm() + { + titleTextBox.Text = string.Empty; + artistTextBox.Text = string.Empty; + genreComboBox.SelectedItem = null; + MinuteNum.Value = 0; + SecondNum.Value = 0; + availableCheckBox.Checked = false; + } + + private void RefreshButton_Click(object sender, EventArgs e) + { + songListBox.Items.Clear(); + PopulateSongList(); + } + + private async void AddButton_Click(object sender, EventArgs e) + { + var title = titleTextBox.Text; + var artist = artistTextBox.Text; + DateTime? releaseDate = releaseDatePicker.Value; + + var idSent = 0; + var selGenre = genreComboBox.SelectedItem as GenreModel; + var selGenreId = Genres.Where(Q => Q.GenreName == selGenre?.GenreName).Select(R => R.GenreId); + + foreach (var item in selGenreId) + { + idSent = item; + } + // Tanggal rilis tidak boleh kosong dan maksimal 7 hari ke depan + if (releaseDate == null || releaseDate > DateTime.Now.AddDays(7)) + { + labelNotif.Text = "Release date can't be empty and must be within 7 days from now"; + return; + } + DateTime utcReleaseDate = DateTime.SpecifyKind((DateTime)releaseDate, DateTimeKind.Utc); + + if (string.IsNullOrEmpty(title)) + { + labelNotif.Text = "Song Title can't be empty"; + return; + } + + if (string.IsNullOrEmpty(artist)) + { + labelNotif.Text = "Song Artist can't be empty"; + return; + } + if (selGenre == null) + { + labelNotif.Text = "Genre can't be empty"; + return; + } + + if (MinuteNum.Value == 0 || SecondNum.Value == 0) + { + labelNotif.Text = "Minutes and seconds can't be empty"; + return; + } + + // Check if seconds value is between 0 and 59 + if (SecondNum.Value < 0 || SecondNum.Value > 59) + { + labelNotif.Text = "Seconds must be between 0 and 59"; + return; + } + + var minutes = MinuteNum.Value; + var seconds = SecondNum.Value; + int lengthInSeconds = Convert.ToInt32(Math.Floor(minutes * 60 + seconds)); + + + var songModel = new InputSongModel + { + SongId = Songs.Count + 1, + Title = title, + Artist = artist, + GenreId = idSent, + Length = lengthInSeconds, + ReleaseDate = utcReleaseDate.ToString("yyyy-MM-ddTHH:mm:ss.fffZ"), + IsAvailable = availableCheckBox.Checked + }; + + var jsonString = JsonConvert.SerializeObject(songModel); + var content = new StringContent(jsonString); + content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/json"); + + var response = await RefHttpClient.PostAsync("https://new-dev.accelist.com:10000/api/song", content); + + response.EnsureSuccessStatusCode(); + + if (response.IsSuccessStatusCode) + { + labelNotif.ForeColor = Color.Green; + labelNotif.Text = "Succesfully to Insert New Menu"; + } + else + { + labelNotif.Text = "Failed to Insert New Menu"; + } + ClearForm(); + PopulateSongList(); + } + + private async void UpdateButton_Click(object sender, EventArgs e) + { + //Searches the selected item + var selListBox = songListBox.SelectedItem as SongModel; + + + var idSent = 0; + var selGenre = genreComboBox.SelectedItem as GenreModel; + var selGenreId = Genres.Where(Q => Q.GenreName == selGenre?.GenreName).Select(R => R.GenreId); + + //Searches every item in the genre that is the same as the selected genre + foreach (var item in selGenreId) + { + idSent = item; + } + if (selListBox == null) + { + labelNotif.Text = "No songs selected"; + return; + } + + var minutes = MinuteNum.Value; + var seconds = SecondNum.Value; + //Converts the value we get from the input into seconds + int lengthInSeconds = Convert.ToInt32(Math.Floor(minutes * 60 + seconds)); + + var menuModel = new InputSongModel + { + SongId = Songs.Count + 1, + Title = titleTextBox.Text, + Artist = artistTextBox.Text, + GenreId = idSent, + Length = lengthInSeconds, + ReleaseDate = releaseDatePicker.Value.ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ss.fffZ"), + IsAvailable = availableCheckBox.Checked + }; + + + var jsonString = JsonConvert.SerializeObject(menuModel); + var content = new StringContent(jsonString); + content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/json"); + + + var response = await RefHttpClient.PostAsync("https://new-dev.accelist.com:10000/api/song", content); + + response.EnsureSuccessStatusCode(); + + if (response.IsSuccessStatusCode) + { + labelNotif.ForeColor = Color.Green; + labelNotif.Text = "Successfully Updated Menu"; + PopulateSongList(); + } + else + { + labelNotif.Text = "Failed to Update Menu"; + } + ClearForm(); + PopulateSongList(); + } + + private void SearchTextBox_TextChanged(object sender, EventArgs e) + { + //List baru + List list = new List(); + var searchText = searchTextBox.Text; + if (searchText != "") + { + list = Songs.Where(Q => Q.Title.Contains(searchText) || Q.Artist.Contains(searchText)).ToList(); + + songListBox.DataSource = list; + songListBox.DisplayMember = "Title"; + } + else + { + //Populates again + PopulateSongList(); + } + } + + private async void DeleteBtn_Click(object sender, EventArgs e) + { + //Searches the index of the selected song + var selectedSongindex = songListBox.SelectedIndex; + var selectedSong = songListBox.Items[selectedSongindex] as SongModel; + + if (selectedSong == null) + { + labelNotif.Text = "Can't delete empty item"; + return; + } + //Response waiting + var response = await RefHttpClient.DeleteAsync($"https://new-dev.accelist.com:10000/api/song/{selectedSong.SongId}"); + + if (response.IsSuccessStatusCode) + { + labelNotif.ForeColor = Color.Green; + labelNotif.Text = "Successully deleted song"; + } + else + { + labelNotif.Text = "Failed to delete song"; + } + //Populates and clears the input form + PopulateSongList(); + ClearForm(); } } } diff --git a/ExamNETIntermediate/Form1.resx b/ExamNETIntermediate/Form1.resx new file mode 100644 index 0000000..af32865 --- /dev/null +++ b/ExamNETIntermediate/Form1.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/ExamNETIntermediate/Models/GenreModel.cs b/ExamNETIntermediate/Models/GenreModel.cs new file mode 100644 index 0000000..1d18af8 --- /dev/null +++ b/ExamNETIntermediate/Models/GenreModel.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ExamNETIntermediate.Models +{ + public class GenreModel + { + public int GenreId { get; set; } + + public string GenreName { get; set; } = string.Empty; + } +} diff --git a/ExamNETIntermediate/Models/SongModel.cs b/ExamNETIntermediate/Models/SongModel.cs new file mode 100644 index 0000000..2b961e4 --- /dev/null +++ b/ExamNETIntermediate/Models/SongModel.cs @@ -0,0 +1,33 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ExamNETIntermediate.Models +{ + public class SongModel + { + public int SongId { get; set; } + public string Title { get; set; } = string.Empty; + public string Artist { get; set; } = string.Empty; + public int GenreId { get; set; } + public string GenreName { get; set; } = string.Empty; + public int Length { get; set; } + public string ReleaseDate { get; set; } = string.Empty; + public Boolean IsAvailable { get; set; } + } + + public class InputSongModel + { + public int SongId { get; set; } + public string Title { get; set; } = string.Empty; + public string Artist { get; set; } = string.Empty; + public string GenreName { get; set; } = string.Empty; + public int GenreId { get; set; } + public int Length { get; set; } + public string ReleaseDate { get; set; } = string.Empty; + public Boolean IsAvailable { get; set; } + } + +}