You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
@@ -175,7 +232,8 @@ public interface PlaylistRepository {
175
232
176
233
/**
177
234
* Decreases the number of likes of a given song in the playlist by 1.
178
-
* The number of likes cannot be less than 0.
235
+
* The number of likes cannot be less than 0. When unliking a song with 0 likes,
236
+
* the operation succeeds silently with likes remaining 0.
179
237
*
180
238
* @param playlistName the name of the playlist.
181
239
* @param songTitle the title of the song.
@@ -210,27 +268,30 @@ public interface PlaylistRepository {
210
268
211
269
## Модели
212
270
213
-
```java
214
-
public record Playlist(String name, Set<Song> songs) {}
215
-
public record Song(String title, String artist, int duration, int likes) {}
216
-
```
271
+
Плейлиста ще моделираме чрез класа `Playlist`, който има публичен конструктор `Playlist(String name, Map<Song, Integer> songs)`, описващ песните и броя харесвания на всяка от тях в дадената плейлиста.
217
272
218
-
- Две песни са еднакви, ако заглавието и артистът съвпадат.
273
+
Песен ще описваме с record-a `Song(String title, String artist, int duration)`, който трябва да има публичен каноничен конструктор. Две песни са еднакви, ако заглавието и артистът съвпадат.
274
+
275
+
Броят харесвания на песен се поддържа отделно за всяка плейлиста. Ако добавите една и съща песен (по име и артист) в две плейлисти, тя може да има различен брой харесвания в контекста на всяка плейлиста. С други думи, харесването на песен в дадена плейлиста не влияе на броя харесвания на същата песен в друга плейлиста.
219
276
220
277
## Валидации
221
278
279
+
- Продължителността трябва да е положително цяло число (> 0). Ако продължителността е невалидна, върнете:
280
+
281
+
```json
282
+
{"status":"ERROR","message":"Duration must be a positive integer"}
283
+
```
284
+
222
285
Уверете се, че всички команди са валидирани и връщат съобщение за грешка, ако форматът на командата не е валиден.
Добра практика при създаването на приложения тип клиент-сървър е да отделяте клиента и сървъра в отделни проекти. Това предотвратява грешки от типа, класове/интерфейси от клиента да се ползват от сървъра, или обратно. Също така, в реална ситуация, бихме искали да пакетираме и разпространяваме поотделно клиентската и сървърната част на нашето приложение. Като минимум, отделете имплементацията на клиента и сървъра в отделни пакети.
249
310
250
-
В грейдъра качете папки `src` и `test`, ако имате тестове (или техен общ `zip` архив).
0 commit comments