Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ mvnw.cmd
build/
!**/src/main/**/build/
!**/src/test/**/build/

**/out/**
### VS Code ###
.vscode/
/.mvn/
4 changes: 4 additions & 0 deletions gradle/libs.versions.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
[versions]
com-fasterxml-jackson-core-jackson-core = "2.15.2"
com-fasterxml-jackson-core-jackson-databind = "2.15.2"
com-fasterxml-jackson-core-jackson-modules-parameter-names = "2.15.2"
org-jetbrains-annotations = "24.1.0"
org-projectlombok-lombok = "1.18.26"
org-springframework-boot-spring-boot-autoconfigure = "3.0.7"
Expand All @@ -22,12 +23,15 @@ org-springframework-cloud-spring-cloud-starter-openfeign = "4.0.2"
[libraries]
com-fasterxml-jackson-core-jackson-core = { module = "com.fasterxml.jackson.core:jackson-core", version.ref = "com-fasterxml-jackson-core-jackson-core" }
com-fasterxml-jackson-core-jackson-databind = { module = "com.fasterxml.jackson.core:jackson-databind", version.ref = "com-fasterxml-jackson-core-jackson-databind" }
com-fasterxml-jackson-core-jackson-modules-parameter-names = { module = "com.fasterxml.jackson.module:jackson-module-parameter-names", version.ref = "com-fasterxml-jackson-core-jackson-modules-parameter-names" }
org-jetbrains-annotations = { module = "org.jetbrains:annotations", version.ref = "org-jetbrains-annotations" }
org-projectlombok-lombok = { module = "org.projectlombok:lombok", version.ref = "org-projectlombok-lombok" }
org-springframework-boot-spring-boot-autoconfigure = { module = "org.springframework.boot:spring-boot-autoconfigure", version.ref = "org-springframework-boot-spring-boot-autoconfigure" }
org-springframework-boot-spring-boot-devtools = { module = "org.springframework.boot:spring-boot-devtools", version.ref = "org-springframework-boot-spring-boot-devtools" }
org-springframework-boot-spring-boot-starter-test = { module = "org.springframework.boot:spring-boot-starter-test", version.ref = "org-springframework-boot-spring-boot-starter-test" }
org-springframework-hateoas-spring-hateoas = { module = "org.springframework.hateoas:spring-hateoas", version.ref = "org-springframework-hateoas-spring-hateoas" }
junit-jupiter-api = { module = "org.junit.jupiter:junit-jupiter-api", version = "5.8.1" }
junit-jupiter-engine = { module = "org.junit.jupiter:junit-jupiter-engine", version = "5.8.1" }
com-odeyalo-sonata-suite = { module = "com.odeyalo.sonata:suite", version.ref = "com-odeyalo-sonata-suite" }
com-playtika-reactivefeign-feign-reactor-spring-cloud-starter = { module = "com.playtika.reactivefeign:feign-reactor-spring-cloud-starter", version.ref = "com-playtika-reactivefeign-feign-reactor-spring-cloud-starter" }
io-projectreactor-reactor-test = { module = "io.projectreactor:reactor-test", version.ref = "io-projectreactor-reactor-test" }
Expand Down
9 changes: 8 additions & 1 deletion suite-brokers/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,17 @@ dependencies {
api(libs.org.projectlombok.lombok)
api(libs.com.odeyalo.sonata.suite)
annotationProcessor(libs.org.projectlombok.lombok)

testImplementation(libs.junit.jupiter.api)
testRuntimeOnly(libs.junit.jupiter.engine)

testImplementation(libs.com.fasterxml.jackson.core.jackson.core)
testImplementation(libs.com.fasterxml.jackson.core.jackson.databind)
testImplementation(libs.com.fasterxml.jackson.core.jackson.modules.parameter.names)
}

group = "com.odeyalo.sonata.suite"
version = "0.0.10"
version = "0.0.11"
description = "suite-brokers"

tasks.withType<JavaCompile>() {
Expand Down
1 change: 1 addition & 0 deletions suite-brokers/lombok.config
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
lombok.copyableAnnotations+=com.fasterxml.jackson.annotation.JsonProperty
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
package com.odeyalo.sonata.suite.brokers.events;

import com.fasterxml.jackson.annotation.JsonCreator;
import lombok.EqualsAndHashCode;
import lombok.Getter;

import java.util.UUID;

@Getter
@EqualsAndHashCode
public abstract class AbstractEvent<T> implements SonataEvent, EventTypeProvider {
protected String id;
protected long creationTime;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package com.odeyalo.sonata.suite.brokers.events.playlist.gen;

public enum GeneratedPlaylistType {
ON_REPEAT
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package com.odeyalo.sonata.suite.brokers.events.playlist.gen;


import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.odeyalo.sonata.suite.brokers.events.playlist.gen.payload.GenerativePlaylistEvent;
import com.odeyalo.sonata.suite.brokers.events.playlist.gen.payload.PlaylistImagesGeneratedPayload;
import com.odeyalo.sonata.suite.brokers.events.playlist.gen.payload.PlaylistMetaGeneratedPayload;
import lombok.EqualsAndHashCode;
import lombok.Value;
import org.jetbrains.annotations.NotNull;

@EqualsAndHashCode(callSuper = true)
@Value
@JsonIgnoreProperties(ignoreUnknown = true)
public class PlaylistImagesGeneratedEvent extends GenerativePlaylistEvent<PlaylistImagesGeneratedPayload> {
public static final String EVENT_TYPE = "playlist_images_generated";

public PlaylistImagesGeneratedEvent(@NotNull final PlaylistImagesGeneratedPayload body,
@NotNull final GeneratedPlaylistType type) {
super(body, type);
}

@JsonCreator(mode = JsonCreator.Mode.PROPERTIES)
public PlaylistImagesGeneratedEvent(@JsonProperty("id") @NotNull final String id,
@JsonProperty("creationTime") final long creationTime,
@JsonProperty("body") @NotNull final PlaylistImagesGeneratedPayload body,
@JsonProperty("playlist_type") @NotNull final GeneratedPlaylistType type) {
super(id, creationTime, body, type);
}

@Override
@NotNull
public String getEventType() {
return EVENT_TYPE;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package com.odeyalo.sonata.suite.brokers.events.playlist.gen;


import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.odeyalo.sonata.suite.brokers.events.playlist.gen.payload.GenerativePlaylistEvent;
import com.odeyalo.sonata.suite.brokers.events.playlist.gen.payload.PlaylistMetaGeneratedPayload;
import com.odeyalo.sonata.suite.brokers.events.playlist.gen.payload.PlaylistTracksGeneratedPayload;
import lombok.EqualsAndHashCode;
import lombok.Value;
import org.jetbrains.annotations.NotNull;

@EqualsAndHashCode(callSuper = true)
@Value
@JsonIgnoreProperties(ignoreUnknown = true)
public class PlaylistMetaGeneratedEvent extends GenerativePlaylistEvent<PlaylistMetaGeneratedPayload> {
public static final String EVENT_TYPE = "playlist_meta_generated";

public PlaylistMetaGeneratedEvent(@NotNull final PlaylistMetaGeneratedPayload body,
@NotNull final GeneratedPlaylistType type) {
super(body, type);
}

@JsonCreator(mode = JsonCreator.Mode.PROPERTIES)
public PlaylistMetaGeneratedEvent(@JsonProperty("id") @NotNull final String id,
@JsonProperty("creationTime") final long creationTime,
@JsonProperty("body") @NotNull final PlaylistMetaGeneratedPayload body,
@JsonProperty("playlist_type") @NotNull final GeneratedPlaylistType type) {
super(id, creationTime, body, type);
}

@Override
@NotNull
public String getEventType() {
return EVENT_TYPE;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package com.odeyalo.sonata.suite.brokers.events.playlist.gen;


import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.odeyalo.sonata.suite.brokers.events.playlist.gen.payload.GenerativePlaylistEvent;
import com.odeyalo.sonata.suite.brokers.events.playlist.gen.payload.PlaylistTracksGeneratedPayload;
import lombok.EqualsAndHashCode;
import lombok.Value;
import org.jetbrains.annotations.NotNull;

@EqualsAndHashCode(callSuper = true)
@Value
@JsonIgnoreProperties(ignoreUnknown = true)
public class PlaylistTracksGeneratedEvent extends GenerativePlaylistEvent<PlaylistTracksGeneratedPayload> {
public static final String EVENT_TYPE = "playlist_tracks_generated";

public PlaylistTracksGeneratedEvent(@NotNull final PlaylistTracksGeneratedPayload body,
@NotNull final GeneratedPlaylistType type) {
super(body, type);
}

@JsonCreator(mode = JsonCreator.Mode.PROPERTIES)
public PlaylistTracksGeneratedEvent(@JsonProperty("id") @NotNull final String id,
@JsonProperty("creationTime") final long creationTime,
@JsonProperty("body") @NotNull final PlaylistTracksGeneratedPayload body,
@JsonProperty("playlist_type") final GeneratedPlaylistType type) {
super(id, creationTime, body, type);
}

@Override
@NotNull
public String getEventType() {
return EVENT_TYPE;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package com.odeyalo.sonata.suite.brokers.events.playlist.gen.payload;

import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Value;
import org.jetbrains.annotations.NotNull;

@Value
@Builder
@AllArgsConstructor(onConstructor_ = {@JsonCreator(mode = JsonCreator.Mode.PROPERTIES)})
public class GeneratedTrack {
@NotNull
@JsonProperty("track_id")
String trackId; // track public ID, the same as in Warehouse
@JsonProperty("index")
int index; // index of the track in the playlist
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
package com.odeyalo.sonata.suite.brokers.events.playlist.gen.payload;

import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonSubTypes;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import com.odeyalo.sonata.suite.brokers.events.AbstractEvent;
import com.odeyalo.sonata.suite.brokers.events.playlist.gen.GeneratedPlaylistType;
import com.odeyalo.sonata.suite.brokers.events.playlist.gen.PlaylistImagesGeneratedEvent;
import com.odeyalo.sonata.suite.brokers.events.playlist.gen.PlaylistMetaGeneratedEvent;
import com.odeyalo.sonata.suite.brokers.events.playlist.gen.PlaylistTracksGeneratedEvent;
import lombok.AccessLevel;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.experimental.FieldDefaults;
import org.jetbrains.annotations.NotNull;

@JsonTypeInfo(
use = JsonTypeInfo.Id.NAME,
include = JsonTypeInfo.As.EXISTING_PROPERTY,
property = "event_type"
)
@JsonSubTypes({
@JsonSubTypes.Type(name = "playlist_tracks_generated", value = PlaylistTracksGeneratedEvent.class),
@JsonSubTypes.Type(name = "playlist_meta_generated", value = PlaylistMetaGeneratedEvent.class),
@JsonSubTypes.Type(name = "playlist_images_generated", value = PlaylistImagesGeneratedEvent.class),
})
@EqualsAndHashCode(callSuper = true)
@FieldDefaults(level = AccessLevel.PRIVATE, makeFinal = true)
@Getter
public abstract class GenerativePlaylistEvent<T> extends AbstractEvent<T> {
@JsonProperty("playlist_type")
GeneratedPlaylistType type;

public GenerativePlaylistEvent(@NotNull final T body,
@NotNull final GeneratedPlaylistType type) {
super(body);
this.type = type;
}

public GenerativePlaylistEvent(@NotNull final String id,
final long creationTime,
@NotNull final T body,
@NotNull final GeneratedPlaylistType type) {
super(id, creationTime, body);
this.type = type;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
package com.odeyalo.sonata.suite.brokers.events.playlist.gen.payload;

import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.odeyalo.sonata.suite.brokers.events.playlist.gen.PlaylistMetaGeneratedEvent;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Value;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

import java.util.List;

@Value
@Builder
@AllArgsConstructor(onConstructor_ = {@JsonCreator(mode = JsonCreator.Mode.PROPERTIES)})
public class PlaylistImagesGeneratedPayload {
@NotNull
@JsonProperty("meta")
PlaylistMetaGeneratedPayload parent;
@JsonProperty("images")
List<Image> images;

@Value
@Builder
@AllArgsConstructor(onConstructor_ = {@JsonCreator(mode = JsonCreator.Mode.PROPERTIES)})
public static class Image {
@NotNull
@JsonProperty("url")
String url;
@Nullable
@JsonProperty("height")
Integer height;
@Nullable
@JsonProperty("width")
Integer width;

public Image(@NotNull final String url) {
this.url = url;
this.height = null;
this.width = null;
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package com.odeyalo.sonata.suite.brokers.events.playlist.gen.payload;

import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Value;
import org.jetbrains.annotations.NotNull;

@Value
@Builder
@AllArgsConstructor(onConstructor_ = {@JsonCreator(mode = JsonCreator.Mode.PROPERTIES)})
public class PlaylistMetaGeneratedPayload {
@NotNull
@JsonProperty("tracks")
PlaylistTracksGeneratedPayload parent;
@NotNull
@JsonProperty("meta")
Meta meta;

@Value
@Builder
@AllArgsConstructor(onConstructor_ = {@JsonCreator(mode = JsonCreator.Mode.PROPERTIES)})
public static class Meta {
@NotNull
@JsonProperty("name")
String name;
@NotNull
@JsonProperty("description")
String description;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package com.odeyalo.sonata.suite.brokers.events.playlist.gen.payload;

import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Value;
import org.jetbrains.annotations.NotNull;

import java.util.List;

@Value
@Builder
@AllArgsConstructor(onConstructor_ = {@JsonCreator(mode = JsonCreator.Mode.PROPERTIES)})
public class PlaylistTracksGeneratedPayload {
@NotNull
@JsonProperty("user_id")
String userId; // a user ID for which this playlist was generated
@NotNull
@JsonProperty("tracks")
List<GeneratedTrack> tracks;
}
Loading