Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Db #317

Open
wants to merge 12 commits into
base: master
Choose a base branch
from
Open

Db #317

Show file tree
Hide file tree
Changes from 9 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
4 changes: 2 additions & 2 deletions .github/workflows/server_gradle.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,10 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up JDK 20
- name: Set up JDK 21
uses: actions/setup-java@v4
with:
java-version: 20
java-version: 21
distribution: 'adopt'
- name: Build with Gradle
run: ./gradlew build
29 changes: 21 additions & 8 deletions mserver/build.gradle
Original file line number Diff line number Diff line change
@@ -1,12 +1,16 @@
plugins {
id 'java'
id 'org.springframework.boot' version '3.1.5'
id 'io.spring.dependency-management' version '1.1.3'
id 'org.springframework.boot' version '3.2.5'
id 'io.spring.dependency-management' version '1.1.4'
id 'org.graalvm.buildtools.native' version '0.9.28'
}

group = 'se.maokei'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '20'

java {
sourceCompatibility = '21'
}

configurations {
compileOnly {
Expand All @@ -20,17 +24,22 @@ repositories {
}

ext {
set('testcontainersVersion', "1.17.6")
set('springShellVersion', "3.2.4")
}


dependencies {
implementation 'org.springframework.boot:spring-boot-starter-webflux'
annotationProcessor "org.springframework.boot:spring-boot-configuration-processor"
implementation 'org.springframework.boot:spring-boot-starter-validation'
implementation 'org.springframework.boot:spring-boot-starter-security'
implementation 'org.springframework.boot:spring-boot-starter-data-r2dbc'
implementation 'org.springframework.shell:spring-shell-starter'
implementation 'org.flywaydb:flyway-core'
implementation 'org.springframework.boot:spring-boot-starter-data-mongodb-reactive'

runtimeOnly 'org.postgresql:postgresql'
runtimeOnly 'org.postgresql:r2dbc-postgresql'

implementation 'org.springframework.boot:spring-boot-starter-actuator'
runtimeOnly 'io.micrometer:micrometer-registry-prometheus'

Expand All @@ -52,18 +61,22 @@ dependencies {
annotationProcessor 'org.projectlombok:lombok'

developmentOnly 'org.springframework.boot:spring-boot-devtools'
developmentOnly 'org.springframework.boot:spring-boot-docker-compose'

testImplementation 'org.springframework.boot:spring-boot-starter-test'
testImplementation 'org.springframework.boot:spring-boot-testcontainers'
testImplementation 'io.projectreactor:reactor-test'
testImplementation 'org.springframework.security:spring-security-test'
testImplementation 'org.testcontainers:junit-jupiter'
testImplementation 'org.testcontainers:postgresql'
testImplementation 'org.testcontainers:r2dbc'
testImplementation 'org.testcontainers:mongodb'
}

dependencyManagement {
imports {
mavenBom "org.testcontainers:testcontainers-bom:${testcontainersVersion}"
}
imports {
mavenBom "org.springframework.shell:spring-shell-dependencies:${springShellVersion}"
}
}

tasks.named('test') {
Expand Down
File renamed without changes.
2 changes: 1 addition & 1 deletion mserver/gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.2.1-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
Expand Down
8 changes: 6 additions & 2 deletions mserver/src/main/java/se/maokei/mserver/DataInitializer.java
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,11 @@
@Slf4j
@Component
class DataInitializer implements CommandLineRunner {
private final UserRepository userRepository;
@Override
public void run(String[] args) throws Exception {

}
/*private final UserRepository userRepository;
private final CommentRepository commentRepository;
private final FileService fileService;
private final MediaRepository mediaRepository;
Expand Down Expand Up @@ -93,5 +97,5 @@ private Mono<User> addInitUser(User user) {
.switchIfEmpty(userRepository.save(user).doFinally(c -> {
log.info("Init user added: " + user.getUsername());
}));
}
}*/
}
15 changes: 9 additions & 6 deletions mserver/src/main/java/se/maokei/mserver/api/ImageController.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,27 +10,30 @@

import java.io.IOException;
import java.util.Base64;
import java.util.UUID;

@RequiredArgsConstructor
@RestController
public class ImageController {
private final PhotoService photoService;

@PostMapping("/photos/add")
@PostMapping("/image")
public String addPhoto(@RequestParam("title") String title,
@RequestParam("image") MultipartFile image, Model model)
throws IOException {
String id = photoService.addPhoto(title, image);
return "redirect:/photos/" + id;
return "redirect:/image/" + id;
}

@Timed
@GetMapping("/photos/{id}")
public String getPhoto(@PathVariable String id, Model model) {
@GetMapping("/image/{id}")
public String getPhoto(@PathVariable UUID id, Model model) {
Photo photo = photoService.getPhoto(id);
model.addAttribute("title", photo.getTitle());
model.addAttribute("image",
Base64.getEncoder().encodeToString(photo.getImage().getData()));
//TODO fix base64
//model.addAttribute("image",
// Base64.getEncoder().encodeToString(photo.getImage().getData()));
model.addAttribute("image", "todo");
return "photos";
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@
import se.maokei.mserver.services.UserService;

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;

@AllArgsConstructor
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import jakarta.validation.Valid;
import lombok.AllArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
Expand All @@ -19,6 +20,24 @@ private Mono<Comment> createComment(@Valid @RequestBody Comment comment) {
return commentRepository.save(comment);
}

@PutMapping("/comment")
private Mono<ResponseEntity<Comment>> updateComment(@Valid @RequestBody Comment.CommentDto dto) {
Mono<Comment> found = commentRepository.findById(dto.id());

return Mono.zip((data) -> {
Comment c1 = (Comment) data[0];
Comment c2 = (Comment) data[1];

if (c2.getComment() != null && c2.getComment().length() > 2) {
c1.setComment(c2.getComment());
}
return c1;
}, found, Mono.just(dto.toComment())
).flatMap(this.commentRepository::save)
.flatMap(res -> Mono.just(ResponseEntity.ok().body(res)))
.switchIfEmpty(Mono.just(ResponseEntity.noContent().build()));
}

@GetMapping("/comment")
private Flux<Comment> getAllComments() {
return commentRepository.findAll();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
import java.io.IOException;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.UUID;

@AllArgsConstructor
@RestController
Expand Down Expand Up @@ -48,7 +49,7 @@ public Mono<Void> upload(@RequestPart("files") Flux<FilePart> partFlux){
}

@GetMapping(value = "/image/{imageId}", produces = MediaType.IMAGE_JPEG_VALUE)
public Mono<FileSystemResource> downloadImage(@PathVariable String imageId) throws Exception {
public Mono<FileSystemResource> downloadImage(@PathVariable UUID imageId) throws Exception {
return fileService.monoFind(imageId);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,18 +10,21 @@
import se.maokei.mserver.model.Playlist;
import se.maokei.mserver.services.PlaylistService;

import java.util.UUID;

@AllArgsConstructor
@RestController
@RequestMapping("/api/v1")
public class PlaylistController {
private PlaylistService playlistService;

@GetMapping("/playlist")
public Flux<Playlist> getAllPlaylists() {
return this.playlistService.getAllPlaylists();
}

@GetMapping("/playlist/{id}")
public Mono<Playlist> getPlaylistById(@PathVariable("id") String id) {
public Mono<Playlist> getPlaylistById(@PathVariable("id") UUID id) {
return this.playlistService.getPlaylist(id);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ public class RegistrationController {
private UserService userService;

@ApiResponses(value = {
@ApiResponse(responseCode = "200", description = "")
@ApiResponse(responseCode = "200", description = "Register a new User")
})
@PostMapping("/register")
public Mono<ResponseEntity<?>> registerAccount(@Valid @RequestBody UserRegisterDto dto) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package se.maokei.mserver.config;

import org.reactivestreams.Publisher;
import org.springframework.data.r2dbc.mapping.event.BeforeConvertCallback;
import org.springframework.data.relational.core.sql.SqlIdentifier;
import org.springframework.stereotype.Component;
import reactor.core.publisher.Mono;
import se.maokei.mserver.model.EntityMetadata;

import java.util.UUID;

@Component
public class EntityBeforeConvert implements BeforeConvertCallback<EntityMetadata> {
@Override
public Publisher<EntityMetadata> onBeforeConvert(EntityMetadata entity, SqlIdentifier table) {
if (entity.getId() == null) {
entity.setId(UUID.randomUUID());
}
return Mono.just(entity);
}
}
12 changes: 6 additions & 6 deletions mserver/src/main/java/se/maokei/mserver/config/MongoConfig.java
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
package se.maokei.mserver.config;

import org.springframework.context.annotation.Bean;
/*import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.domain.ReactiveAuditorAware;
import org.springframework.data.mongodb.config.EnableReactiveMongoAuditing;
import reactor.core.publisher.Mono;
import reactor.core.publisher.Mono;*/

@Configuration
@EnableReactiveMongoAuditing
//@Configuration
//@EnableReactiveMongoAuditing
public class MongoConfig {
@Bean
/*@Bean
ReactiveAuditorAware<String> auditorAware() {
return () -> Mono.just("server");
}
}*/
}
Original file line number Diff line number Diff line change
@@ -1,18 +1,18 @@
package se.maokei.mserver.config;

import org.springframework.data.mongodb.core.mapping.event.AbstractMongoEventListener;
/*import org.springframework.data.mongodb.core.mapping.event.AbstractMongoEventListener;
import org.springframework.data.mongodb.core.mapping.event.BeforeConvertEvent;
import org.springframework.stereotype.Component;
import se.maokei.mserver.model.EntityMetadata;
import se.maokei.mserver.model.EntityMetadata;*/

@Component
public class MongoListener extends AbstractMongoEventListener<EntityMetadata> {
@Override
//@Component
public class MongoListener /*extends AbstractMongoEventListener<EntityMetadata>*/ {
/*@Override
public void onBeforeConvert(BeforeConvertEvent<EntityMetadata> event) {
super.onBeforeConvert(event);

//LocalDateTime dateNow = LocalDateTime.now();
//event.getSource().setCreatedAt(dateNow);
//event.getSource().setUpdatedAt(dateNow);
}
}*/
}
14 changes: 12 additions & 2 deletions mserver/src/main/java/se/maokei/mserver/model/Comment.java
Original file line number Diff line number Diff line change
@@ -1,14 +1,24 @@
package se.maokei.mserver.model;

import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import org.springframework.data.mongodb.core.mapping.Document;

import java.util.UUID;

@NoArgsConstructor
@AllArgsConstructor
@Getter
@Setter
@Builder
@Document
public class Comment extends EntityMetadata {
@Schema(name = "user_id", description = "User that created comment")
private UUID user_id;
@Schema(name = "comment", description = "Comment text")
private String comment;

public record CommentDto(UUID id, UUID user_id, String comment) {
public Comment toComment() {
return Comment.builder().user_id(id).user_id(user_id).comment(comment).build();
}
}
}
18 changes: 10 additions & 8 deletions mserver/src/main/java/se/maokei/mserver/model/EntityMetadata.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,25 +4,27 @@
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Getter;
import lombok.Setter;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.Id;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.annotation.*;
import org.springframework.data.relational.core.mapping.Column;

import java.time.LocalDateTime;
import java.util.UUID;

@Getter
@Setter
public abstract class EntityMetadata {
private static final long serialVersionUID = 1L;
public abstract class EntityMetadata {
@Schema(name = "id", description = "The generated ID when saved into the database")
@Id
private String id;
private UUID id;

@Schema(name = "createdAt", description = "Generated by database upon document creation")
@CreatedDate
@JsonFormat(pattern = "yyyy-mm-dd HH:mm:ss")
private LocalDateTime createdAt;
@Column("created")
private LocalDateTime created;

@Schema(name = "updatedAt", description = "Generated by database upon document update")
@LastModifiedDate
@JsonFormat(pattern = "yyyy-mm-dd HH:mm:ss")
private LocalDateTime updatedAt;
private LocalDateTime updated;
}
4 changes: 2 additions & 2 deletions mserver/src/main/java/se/maokei/mserver/model/Image.java
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
package se.maokei.mserver.model;

import lombok.*;
import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.data.relational.core.mapping.Table;

@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Document
@Table
public class Image extends Media {
private String pixels;
}
Loading