diff --git a/ExamNETIntermediate/ExamNETIntermediate.csproj b/ExamNETIntermediate/ExamNETIntermediate.csproj
index cc5bed4..ba0f5ad 100644
--- a/ExamNETIntermediate/ExamNETIntermediate.csproj
+++ b/ExamNETIntermediate/ExamNETIntermediate.csproj
@@ -12,4 +12,19 @@
+
+
+ True
+ True
+ Resources.resx
+
+
+
+
+
+ ResXFileCodeGenerator
+ Resources.Designer.cs
+
+
+
\ No newline at end of file
diff --git a/ExamNETIntermediate/Form1.Designer.cs b/ExamNETIntermediate/Form1.Designer.cs
index ece918a..e9f1e45 100644
--- a/ExamNETIntermediate/Form1.Designer.cs
+++ b/ExamNETIntermediate/Form1.Designer.cs
@@ -28,12 +28,308 @@ 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";
+ listBoxMenu = new ListBox();
+ numericUpDownMenit = new NumericUpDown();
+ tableLayoutPanel1 = new TableLayoutPanel();
+ checkBoxAvailable = new CheckBox();
+ textBoxTitle = new TextBox();
+ textBoxArtis = new TextBox();
+ label1 = new Label();
+ textBoxArtist = new Label();
+ UpdateBtn = new Button();
+ AddBtn = new Button();
+ RefreshBtn = new Button();
+ comboBoxGenre = new ComboBox();
+ labelNotification = new Label();
+ numericUpDownSeconds = new NumericUpDown();
+ label2 = new Label();
+ label3 = new Label();
+ DeleteBtn = new Button();
+ label4 = new Label();
+ searchBox = new TextBox();
+ searchBtn = new Button();
+ dateTimePicker = new DateTimePicker();
+ label5 = new Label();
+ label6 = new Label();
+ ((System.ComponentModel.ISupportInitialize)numericUpDownMenit).BeginInit();
+ tableLayoutPanel1.SuspendLayout();
+ ((System.ComponentModel.ISupportInitialize)numericUpDownSeconds).BeginInit();
+ SuspendLayout();
+ //
+ // listBoxMenu
+ //
+ listBoxMenu.FormattingEnabled = true;
+ listBoxMenu.ItemHeight = 15;
+ listBoxMenu.Location = new Point(12, 53);
+ listBoxMenu.Name = "listBoxMenu";
+ listBoxMenu.Size = new Size(254, 334);
+ listBoxMenu.TabIndex = 0;
+ listBoxMenu.SelectedIndexChanged += listBoxMenu_SelectedIndexChanged;
+ //
+ // numericUpDownMenit
+ //
+ numericUpDownMenit.Location = new Point(270, 261);
+ numericUpDownMenit.Maximum = new decimal(new int[] { 60, 0, 0, 0 });
+ numericUpDownMenit.Name = "numericUpDownMenit";
+ numericUpDownMenit.Size = new Size(120, 23);
+ numericUpDownMenit.TabIndex = 1;
+ numericUpDownMenit.UseWaitCursor = true;
+ //
+ // tableLayoutPanel1
+ //
+ tableLayoutPanel1.ColumnCount = 2;
+ tableLayoutPanel1.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 50F));
+ tableLayoutPanel1.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 50F));
+ tableLayoutPanel1.Controls.Add(checkBoxAvailable, 1, 2);
+ tableLayoutPanel1.Controls.Add(textBoxTitle, 1, 0);
+ tableLayoutPanel1.Controls.Add(textBoxArtis, 1, 1);
+ tableLayoutPanel1.Controls.Add(label1, 0, 0);
+ tableLayoutPanel1.Controls.Add(textBoxArtist, 0, 1);
+ tableLayoutPanel1.Location = new Point(272, 123);
+ tableLayoutPanel1.Name = "tableLayoutPanel1";
+ tableLayoutPanel1.RowCount = 3;
+ tableLayoutPanel1.RowStyles.Add(new RowStyle(SizeType.Percent, 50F));
+ tableLayoutPanel1.RowStyles.Add(new RowStyle(SizeType.Absolute, 50F));
+ tableLayoutPanel1.RowStyles.Add(new RowStyle(SizeType.Percent, 50F));
+ tableLayoutPanel1.Size = new Size(389, 115);
+ tableLayoutPanel1.TabIndex = 2;
+ //
+ // checkBoxAvailable
+ //
+ checkBoxAvailable.AutoSize = true;
+ checkBoxAvailable.Location = new Point(197, 85);
+ checkBoxAvailable.Name = "checkBoxAvailable";
+ checkBoxAvailable.Size = new Size(93, 19);
+ checkBoxAvailable.TabIndex = 9;
+ checkBoxAvailable.Text = "Is Available ?";
+ checkBoxAvailable.UseVisualStyleBackColor = true;
+ //
+ // textBoxTitle
+ //
+ textBoxTitle.Location = new Point(197, 3);
+ textBoxTitle.Name = "textBoxTitle";
+ textBoxTitle.Size = new Size(177, 23);
+ textBoxTitle.TabIndex = 8;
+ //
+ // textBoxArtis
+ //
+ textBoxArtis.Location = new Point(197, 35);
+ textBoxArtis.Name = "textBoxArtis";
+ textBoxArtis.Size = new Size(177, 23);
+ textBoxArtis.TabIndex = 10;
+ //
+ // label1
+ //
+ label1.AutoSize = true;
+ label1.Location = new Point(3, 0);
+ label1.Name = "label1";
+ label1.Size = new Size(35, 15);
+ label1.TabIndex = 6;
+ label1.Text = "Title :";
+ //
+ // textBoxArtist
+ //
+ textBoxArtist.AutoSize = true;
+ textBoxArtist.Location = new Point(3, 32);
+ textBoxArtist.Name = "textBoxArtist";
+ textBoxArtist.Size = new Size(76, 15);
+ textBoxArtist.TabIndex = 7;
+ textBoxArtist.Text = "Artist Name :";
+ //
+ // UpdateBtn
+ //
+ UpdateBtn.Location = new Point(484, 304);
+ UpdateBtn.Name = "UpdateBtn";
+ UpdateBtn.Size = new Size(75, 23);
+ UpdateBtn.TabIndex = 4;
+ UpdateBtn.Text = "Update";
+ UpdateBtn.UseVisualStyleBackColor = true;
+ UpdateBtn.Click += UpdateBtn_Click;
+ //
+ // AddBtn
+ //
+ AddBtn.Location = new Point(565, 304);
+ AddBtn.Name = "AddBtn";
+ AddBtn.Size = new Size(75, 23);
+ AddBtn.TabIndex = 5;
+ AddBtn.Text = "Add Song";
+ AddBtn.UseVisualStyleBackColor = true;
+ AddBtn.Click += AddBtn_Click;
+ //
+ // RefreshBtn
+ //
+ RefreshBtn.Location = new Point(322, 304);
+ RefreshBtn.Name = "RefreshBtn";
+ RefreshBtn.Size = new Size(75, 23);
+ RefreshBtn.TabIndex = 3;
+ RefreshBtn.Text = "Refresh";
+ RefreshBtn.UseVisualStyleBackColor = true;
+ RefreshBtn.Click += RefreshBtn_Click;
+ //
+ // comboBoxGenre
+ //
+ comboBoxGenre.FormattingEnabled = true;
+ comboBoxGenre.Location = new Point(667, 151);
+ comboBoxGenre.Name = "comboBoxGenre";
+ comboBoxGenre.Size = new Size(121, 23);
+ comboBoxGenre.TabIndex = 6;
+ //
+ // labelNotification
+ //
+ labelNotification.AutoSize = true;
+ labelNotification.Location = new Point(281, 348);
+ labelNotification.Name = "labelNotification";
+ labelNotification.Size = new Size(70, 15);
+ labelNotification.TabIndex = 7;
+ labelNotification.Text = "Notification";
+ //
+ // numericUpDownSeconds
+ //
+ numericUpDownSeconds.Location = new Point(396, 261);
+ numericUpDownSeconds.Maximum = new decimal(new int[] { 60, 0, 0, 0 });
+ numericUpDownSeconds.Name = "numericUpDownSeconds";
+ numericUpDownSeconds.Size = new Size(120, 23);
+ numericUpDownSeconds.TabIndex = 9;
+ //
+ // label2
+ //
+ label2.AutoSize = true;
+ label2.Location = new Point(270, 243);
+ label2.Name = "label2";
+ label2.Size = new Size(38, 15);
+ label2.TabIndex = 10;
+ label2.Text = "Menit";
+ //
+ // label3
+ //
+ label3.AutoSize = true;
+ label3.Location = new Point(396, 243);
+ label3.Name = "label3";
+ label3.Size = new Size(34, 15);
+ label3.TabIndex = 11;
+ label3.Text = "Detik";
+ //
+ // DeleteBtn
+ //
+ DeleteBtn.Location = new Point(403, 304);
+ DeleteBtn.Name = "DeleteBtn";
+ DeleteBtn.Size = new Size(75, 23);
+ DeleteBtn.TabIndex = 12;
+ DeleteBtn.Text = "Delete";
+ DeleteBtn.UseVisualStyleBackColor = true;
+ DeleteBtn.Click += DeleteBtn_Click;
+ //
+ // label4
+ //
+ label4.AutoSize = true;
+ label4.Location = new Point(667, 133);
+ label4.Name = "label4";
+ label4.Size = new Size(38, 15);
+ label4.TabIndex = 13;
+ label4.Text = "Genre";
+ label4.TextAlign = ContentAlignment.TopCenter;
+ //
+ // searchBox
+ //
+ searchBox.Location = new Point(277, 53);
+ searchBox.Name = "searchBox";
+ searchBox.Size = new Size(182, 23);
+ searchBox.TabIndex = 14;
+ //
+ // searchBtn
+ //
+ searchBtn.Location = new Point(276, 82);
+ searchBtn.Name = "searchBtn";
+ searchBtn.Size = new Size(75, 23);
+ searchBtn.TabIndex = 15;
+ searchBtn.Text = "Search";
+ searchBtn.UseVisualStyleBackColor = true;
+ searchBtn.Click += searchBtn_Click;
+ //
+ // dateTimePicker
+ //
+ dateTimePicker.CustomFormat = "dd-MM-yyyy";
+ dateTimePicker.Format = DateTimePickerFormat.Custom;
+ dateTimePicker.Location = new Point(538, 260);
+ dateTimePicker.Name = "dateTimePicker";
+ dateTimePicker.Size = new Size(158, 23);
+ dateTimePicker.TabIndex = 16;
+ //
+ // label5
+ //
+ label5.AutoSize = true;
+ label5.Location = new Point(538, 242);
+ label5.Name = "label5";
+ label5.Size = new Size(83, 15);
+ label5.TabIndex = 17;
+ label5.Text = "Released Date:";
+ //
+ // label6
+ //
+ label6.AutoSize = true;
+ label6.Location = new Point(275, 35);
+ label6.Name = "label6";
+ label6.Size = new Size(62, 15);
+ label6.TabIndex = 18;
+ label6.Text = "SearchBox";
+ //
+ // Form1
+ //
+ AutoScaleDimensions = new SizeF(7F, 15F);
+ AutoScaleMode = AutoScaleMode.Font;
+ BackColor = SystemColors.InactiveCaption;
+ ClientSize = new Size(800, 450);
+ Controls.Add(label6);
+ Controls.Add(label5);
+ Controls.Add(dateTimePicker);
+ Controls.Add(searchBtn);
+ Controls.Add(searchBox);
+ Controls.Add(label4);
+ Controls.Add(DeleteBtn);
+ Controls.Add(label3);
+ Controls.Add(label2);
+ Controls.Add(numericUpDownSeconds);
+ Controls.Add(AddBtn);
+ Controls.Add(UpdateBtn);
+ Controls.Add(labelNotification);
+ Controls.Add(comboBoxGenre);
+ Controls.Add(RefreshBtn);
+ Controls.Add(tableLayoutPanel1);
+ Controls.Add(numericUpDownMenit);
+ Controls.Add(listBoxMenu);
+ Name = "Form1";
+ ((System.ComponentModel.ISupportInitialize)numericUpDownMenit).EndInit();
+ tableLayoutPanel1.ResumeLayout(false);
+ tableLayoutPanel1.PerformLayout();
+ ((System.ComponentModel.ISupportInitialize)numericUpDownSeconds).EndInit();
+ ResumeLayout(false);
+ PerformLayout();
}
#endregion
+
+ private ListBox listBoxMenu;
+ private NumericUpDown numericUpDownMenit;
+ private TableLayoutPanel tableLayoutPanel1;
+ private Button RefreshBtn;
+ private Button UpdateBtn;
+ private Button AddBtn;
+ private ComboBox comboBoxGenre;
+ private Label label1;
+ private Label textBoxArtist;
+ private TextBox textBoxTitle;
+ private Label labelNotification;
+ private CheckBox checkBoxAvailable;
+ private NumericUpDown numericUpDownSeconds;
+ private Label label2;
+ private Label label3;
+ private TextBox textBoxArtis;
+ private Button DeleteBtn;
+ private Label label4;
+ private TextBox searchBox;
+ private Button searchBtn;
+ private DateTimePicker dateTimePicker;
+ private Label label5;
+ private Label label6;
}
}
diff --git a/ExamNETIntermediate/Form1.cs b/ExamNETIntermediate/Form1.cs
index 3302c50..55ef7e2 100644
--- a/ExamNETIntermediate/Form1.cs
+++ b/ExamNETIntermediate/Form1.cs
@@ -1,10 +1,287 @@
+using ExamNETIntermediate.Model;
+using Newtonsoft.Json;
+using System.Text;
+using System.ComponentModel;
+using Newtonsoft.Json.Serialization;
+using System.Collections.Generic;
+using System.Security;
+using Microsoft.VisualBasic;
+//Robertus Ferdinand
namespace ExamNETIntermediate
{
public partial class Form1 : Form
{
+
+
+ public List Genre { get; set; } = new List();
+ public List Song { get; set; } = new List();
+ public HttpClient _httpClient { get; set; } = new HttpClient();
public Form1()
{
InitializeComponent();
+ PopulateComboBox();
+ PopulateListBox();
+ /*dateTimePicker.MinDate =DateTime.Today;
+ dateTimePicker.MaxDate =DateTime.Today.AddDays(7);*/
}
+
+ public async void PopulateListBox()
+ {
+ var response = await _httpClient.GetAsync("https://new-dev.accelist.com:10000/api/song");
+ response.EnsureSuccessStatusCode();
+ var jsonContent = await response.Content.ReadAsStringAsync();
+ var content = JsonConvert.DeserializeObject>(jsonContent);
+ if (content != null)
+ {
+ Song = content;
+ }
+ listBoxMenu.Items.Clear();
+ listBoxMenu.Items.AddRange(Song.ToArray());
+ listBoxMenu.DisplayMember = "Title";
+
+ }
+
+ public async void PopulateComboBox()
+ {
+ var response = await _httpClient.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)
+ {
+ Genre = content;
+ }
+ comboBoxGenre.Items.Clear();
+ comboBoxGenre.Items.AddRange(Genre.ToArray());
+ comboBoxGenre.DisplayMember = "GenreName";
+
+ }
+
+ public void RefreshBtn_Click(object sender, EventArgs e)
+ {
+ PopulateListBox();
+ }
+
+ private async void AddBtn_Click(object sender, EventArgs e)
+ {
+ var songTitle = textBoxTitle.Text;
+ var artistName = textBoxArtis.Text;
+ int minute = (int)numericUpDownMenit.Value;
+ int seconds = (int)numericUpDownSeconds.Value;
+ int totalDuration = (minute * 60) + seconds;
+ DateTime currentDate = dateTimePicker.Value;
+
+ //validate each conditions
+ if (seconds == 0)
+ {
+ labelNotification.Text = "Duration Cannot be Empty!";
+ return;
+ }
+ if (currentDate > DateTime.Now.AddDays(7)||currentDate < DateTime.Now.AddDays(-7))
+ {
+ labelNotification.Text = "Please Select a date within the next 7 days !";
+ return;
+ }
+ if (minute == 0)
+ {
+ labelNotification.Text = "Duration Cannot Be Empty!";
+ return;
+ }
+ if (string.IsNullOrEmpty(songTitle))
+ {
+ labelNotification.Text = "Song Title Cannot Be Empty!";
+ return;
+ }
+ if (string.IsNullOrEmpty(artistName))
+ {
+ labelNotification.Text = "Artist Name Cannot Be Empty!";
+ return;
+ }
+ if(!checkBoxAvailable.Checked)
+ {
+ labelNotification.Text = "Please Mark the checkbox!";
+ return;
+ }
+ var selectedGenre = comboBoxGenre.SelectedItem as GenreModel;
+ if (selectedGenre == null)
+ {
+ labelNotification.Text = "Please select a genre!";
+ return;
+ }
+
+ var songModel = new SongModelInput
+ {
+ Title = songTitle,
+ Artist = artistName,
+ Length = totalDuration,
+ IsAvailable = checkBoxAvailable.Checked,
+ ReleaseDate = currentDate,
+ GenreId = selectedGenre.GenreId
+ };
+
+ var jsonString = JsonConvert.SerializeObject(songModel);
+ var content = new StringContent(jsonString);
+ content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/json");
+
+ var response = await _httpClient.PostAsync("https://new-dev.accelist.com:10000/api/song", content);
+ response.EnsureSuccessStatusCode();
+ if (response.IsSuccessStatusCode)
+ {
+ labelNotification.Text = "Successfully Inserted to new menu!";
+ }
+ else
+ {
+ labelNotification.Text = "Failed to Insert New Menu!";
+ }
+
+ PopulateListBox();
+ ClearInput();
+ }
+
+ public void ClearInput()
+ {
+ textBoxArtis.Text = string.Empty;
+ textBoxTitle.Text = string.Empty;
+ comboBoxGenre.SelectedItem = null;
+ checkBoxAvailable.Checked = false;
+ numericUpDownMenit.Value = 0;
+ numericUpDownSeconds.Value = 0;
+ dateTimePicker.Value = DateTime.Now;
+
+ }
+
+ private async void UpdateBtn_Click(object sender, EventArgs e)
+ {
+ if (listBoxMenu.SelectedItem != null)
+ {
+ if (listBoxMenu.SelectedItem is SongModel selectedSong)
+ {
+ string titleNameUp = textBoxTitle.Text;
+ string artistNameUp = textBoxArtis.Text;
+ bool updateAvail = checkBoxAvailable.Checked;
+ int minute = (int)numericUpDownMenit.Value;
+ DateTime releasedDate = dateTimePicker.Value;
+ int seconds = (int)numericUpDownSeconds.Value;
+ int totalDuration = (minute * 60) + seconds;
+
+ if (releasedDate > DateTime.Now.AddDays(7) || releasedDate < DateTime.Now)
+ {
+ labelNotification.Text = "Please Select a date within the next 7 days range !";
+ return;
+ }
+ SongModelInput updateSong = new SongModelInput
+ {
+ SongId = Convert.ToInt32(selectedSong.SongId),
+ Title = titleNameUp,
+ Artist = artistNameUp,
+ GenreId = comboBoxGenre.SelectedIndex + 1,
+ Length = totalDuration,
+ ReleaseDate = releasedDate,
+ IsAvailable = updateAvail
+ };
+ string json = JsonConvert.SerializeObject(updateSong);
+ StringContent content = new StringContent(json, Encoding.UTF8, "application/json");
+ HttpResponseMessage response = await _httpClient.PutAsync("https://new-dev.accelist.com:10000/api/song", content);
+
+ if (response.IsSuccessStatusCode)
+ {
+ labelNotification.Text = "Song Updated!";
+ PopulateListBox();
+ }
+ else
+ {
+ labelNotification.Text = $"Failed";
+ }
+ }
+ else
+ {
+ labelNotification.Text = "Invalid selection.";
+ }
+ }
+ else
+ {
+ labelNotification.Text = "No item selected.";
+ }
+
+ PopulateListBox();
+ }
+
+
+ private async void DeleteBtn_Click(object sender, EventArgs e)
+ {
+ if (listBoxMenu.SelectedItem != null)
+ {
+ SongModel selectedSong = (SongModel)listBoxMenu.SelectedItem;
+ HttpResponseMessage response = await _httpClient.DeleteAsync($"https://new-dev.accelist.com:10000/api/song/{selectedSong.SongId}");
+ if (response.IsSuccessStatusCode)
+ {
+ labelNotification.Text = "Deleted";
+ PopulateListBox();
+ }
+ else
+ {
+ labelNotification.Text = "Rejected";
+ }
+ }
+ else
+ {
+ labelNotification.Text = "There's nothing to Delete!";
+
+ }
+ PopulateListBox();
+ }
+
+ private void listBoxMenu_SelectedIndexChanged(object sender, EventArgs e)
+ {
+ if (listBoxMenu.SelectedItem != null)
+ {
+ var selectedItem = listBoxMenu.SelectedItem as SongModel;
+
+ if (selectedItem != null)
+ {
+ var selectedSong = Genre.FirstOrDefault(items => items.GenreName == selectedItem.GenreName);
+
+ if (selectedSong != null)
+ {
+ DateTime currentDate = selectedItem.ReleaseDate;
+ int minute = selectedItem.Length / 60;
+ int seconds = selectedItem.Length % 60;
+
+ textBoxTitle.Text = selectedItem.Title;
+ textBoxArtis.Text = selectedItem.Artist;
+ checkBoxAvailable.Checked = selectedItem.IsAvailable;
+ comboBoxGenre.SelectedItem = selectedSong;
+ numericUpDownMenit.Value = Convert.ToInt32(minute);
+ numericUpDownSeconds.Value = Convert.ToInt32(seconds);
+ dateTimePicker.Value = currentDate;
+ }
+ else
+ {
+ labelNotification.Text = "Selected song's genre not found!";
+ return;
+ }
+ }
+ else
+ {
+ labelNotification.Text = "Choose songs first!";
+ return;
+ }
+ }
+ else
+ {
+ labelNotification.Text = "Choose An item!";
+ return;
+ }
+ }
+
+ private void searchBtn_Click(object sender, EventArgs e)
+ {
+ var search = searchBox.Text;
+ var searchItem = Song.Where(items => items.Title.Contains(search) || items.Artist.Contains(search)).ToList();
+ listBoxMenu.DataSource = searchItem;
+ listBoxMenu.DisplayMember = "Title";
+
+ }
+
}
}
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/Model/GenreModel.cs b/ExamNETIntermediate/Model/GenreModel.cs
new file mode 100644
index 0000000..a708a4a
--- /dev/null
+++ b/ExamNETIntermediate/Model/GenreModel.cs
@@ -0,0 +1,16 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace ExamNETIntermediate.Model
+{
+ public class GenreModel
+ {
+ public int GenreId { get; set; }
+ public string GenreName { get; set; } = string.Empty;
+ }
+
+
+}
diff --git a/ExamNETIntermediate/Model/SongModel.cs b/ExamNETIntermediate/Model/SongModel.cs
new file mode 100644
index 0000000..940a121
--- /dev/null
+++ b/ExamNETIntermediate/Model/SongModel.cs
@@ -0,0 +1,19 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace ExamNETIntermediate.Model
+{
+ public class SongModel
+ {
+ 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 Length { get; set; }
+ public DateTime ReleaseDate { get; set; }
+ public bool IsAvailable { get; set; }
+ }
+}
diff --git a/ExamNETIntermediate/Model/SongModelInput.cs b/ExamNETIntermediate/Model/SongModelInput.cs
new file mode 100644
index 0000000..e081bd0
--- /dev/null
+++ b/ExamNETIntermediate/Model/SongModelInput.cs
@@ -0,0 +1,19 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace ExamNETIntermediate.Model
+{
+ public class SongModelInput
+ {
+ 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 int Length { get; set; }
+ public DateTime ReleaseDate { get; set; }
+ public bool IsAvailable { get; set; }
+ }
+}
diff --git a/ExamNETIntermediate/Properties/Resources.Designer.cs b/ExamNETIntermediate/Properties/Resources.Designer.cs
new file mode 100644
index 0000000..2fbbf69
--- /dev/null
+++ b/ExamNETIntermediate/Properties/Resources.Designer.cs
@@ -0,0 +1,63 @@
+//------------------------------------------------------------------------------
+//
+// This code was generated by a tool.
+// Runtime Version:4.0.30319.42000
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+namespace ExamNETIntermediate.Properties {
+ using System;
+
+
+ ///
+ /// A strongly-typed resource class, for looking up localized strings, etc.
+ ///
+ // This class was auto-generated by the StronglyTypedResourceBuilder
+ // class via a tool like ResGen or Visual Studio.
+ // To add or remove a member, edit your .ResX file then rerun ResGen
+ // with the /str option, or rebuild your VS project.
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ internal class Resources {
+
+ private static global::System.Resources.ResourceManager resourceMan;
+
+ private static global::System.Globalization.CultureInfo resourceCulture;
+
+ [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+ internal Resources() {
+ }
+
+ ///
+ /// Returns the cached ResourceManager instance used by this class.
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Resources.ResourceManager ResourceManager {
+ get {
+ if (object.ReferenceEquals(resourceMan, null)) {
+ global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("ExamNETIntermediate.Properties.Resources", typeof(Resources).Assembly);
+ resourceMan = temp;
+ }
+ return resourceMan;
+ }
+ }
+
+ ///
+ /// Overrides the current thread's CurrentUICulture property for all
+ /// resource lookups using this strongly typed resource class.
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Globalization.CultureInfo Culture {
+ get {
+ return resourceCulture;
+ }
+ set {
+ resourceCulture = value;
+ }
+ }
+ }
+}
diff --git a/ExamNETIntermediate/Properties/Resources.resx b/ExamNETIntermediate/Properties/Resources.resx
new file mode 100644
index 0000000..1af7de1
--- /dev/null
+++ b/ExamNETIntermediate/Properties/Resources.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