Skip to content
Open
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
Binary file added docs/diagrams/DatabaseModels.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
133 changes: 133 additions & 0 deletions docs/diagrams/database_models.puml
Original file line number Diff line number Diff line change
@@ -0,0 +1,133 @@
@startuml DatabaseModels

hide circle

skinparam linetype ortho

entity "Event" as e {
+ id: ulid
+ name: string
+ description: string
+ location: string
+ startDate: date
+ endDate: date
+ style_id: ulid
+ day_ids: ulid[]
+ sponsor_ids: ulid[]
+ session_ids: ulid[]
+ timeslotSize_ids: ulid[]
--
url: string
--
+ created_at: timestamp
+ updated_at: timestamp

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why are the above entries separated from the entries above? created_at and updated_at not implemented at this state.

}

entity "style" as s {
+ id: ulid
+ name: string
+ description: string
+ color: string
+ textColor: string
+ image: string
+ event_ids: ulid[]
--
+ created_at: timestamp
+ updated_at: timestamp
}

entity "day" as d {
+ id: ulid
+ date: date
+ note: string
+ event_id: ulid
+ room_ids: ulid[]
--
+ created_at: timestamp
+ updated_at: timestamp
}

entity "room" as r {
+ id: ulid
+ name: string
+ description: string
+ day_ids: ulid[]
+ timeslot_ids: ulid[]
--
+ created_at: timestamp
+ updated_at: timestamp
}

entity "timeslot" as t {
+ id: ulid
+ start: time
+ end: time
+ room_id: ulid
+ session_ids: ulid[]
+ isBreak: boolean
+ isBlocking: boolean
+ isNoBlockingBreak: boolean
+ timeslotSize_id: ulid
--
+ created_at: timestamp
+ updated_at: timestamp
}

entity "timeslotSize" as ts {
+ id: ulid
+ name: string
+ minutes: number
+ timeslot_ids: ulid[]
--
+ created_at: timestamp
+ updated_at: timestamp
}

entity "sponsor" as sp {
+ id: ulid
+ title: string
+ description: string
+ url: string
+ image: string
+ event_id: ulid
--
+ created_at: timestamp
+ updated_at: timestamp
}

entity "session" as se {
+ id: ulid
+ name: string
+ description: string
+ timeslot_ids: ulid[]
+ event_id: ulid
+ speaker_ids: ulid[]
--
+ created_at: timestamp
+ updated_at: timestamp
}

entity "speaker" as spk {
+ id: ulid
+ name: string
+ description: string
+ url: string
+ image: string
+ session_ids: ulid[]
--
+ created_at: timestamp
+ updated_at: timestamp
}

e }o--|| s
e ||--|{ d
r }|--|{ d
r ||--|{ t
t }o--|| ts
e ||--|{ sp
e }|--|{ ts
e ||--|{ se
se ||--|{ spk
se |o--|| t

@enduml
10 changes: 10 additions & 0 deletions packages/backend/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
<jackson-databind-nullable.version>0.2.6</jackson-databind-nullable.version>
<liquibase.version>4.20.0</liquibase.version>
<ulidj.version>1.0.0</ulidj.version>
<h2.version>2.1.214</h2.version>

<!-- plugin version -->
<plugins.openapi-generator.version>6.4.0</plugins.openapi-generator.version>
Expand Down Expand Up @@ -73,6 +74,11 @@
<artifactId>jackson-databind-nullable</artifactId>
<version>${jackson-databind-nullable.version}</version>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>${h2.version}</version>
</dependency>
</dependencies>
</dependencyManagement>

Expand Down Expand Up @@ -116,6 +122,10 @@
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
</dependency>

<!-- test -->
<dependency>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package de.mayflower.backend.controller

import de.mayflower.backend.entity.RoomEntity
import de.mayflower.backend.repository.RoomRepository
import de.mayflower.backend.stubs.api.RoomsControllerDelegate
import de.mayflower.backend.stubs.model.Room
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.http.HttpStatus
import org.springframework.http.ResponseEntity
import org.springframework.stereotype.Component

@Component("roomsControllerDelegate")
class RoomController(private val roomRepository: RoomRepository) : RoomsControllerDelegate {

override fun getRooms(): ResponseEntity<List<Room>> {
val roomsEntityList = this.roomRepository.findAll()

val rooms = roomsEntityList.map { Room(it.id, it.name) }

return ResponseEntity(rooms, HttpStatus.OK)
}

override fun createRoom(room: Room?): ResponseEntity<Room> {

if(room === null) {
return ResponseEntity(HttpStatus.BAD_REQUEST)
}

val roomEntity = RoomEntity(room.name, "description")

this.roomRepository.save(roomEntity)

return ResponseEntity(room, HttpStatus.CREATED)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package de.mayflower.backend.entity

import jakarta.persistence.*
import jakarta.validation.constraints.*
import org.hibernate.annotations.GenericGenerator
import java.util.Date

@Entity
@Table(name = "day")
class DayEntity(
@NotNull
val date: Date,

@NotNull
val note: String,

@ManyToOne(cascade = [CascadeType.ALL])
val event: EventEntity = EventEntity(),

@ManyToMany(cascade = [CascadeType.ALL])
val rooms: MutableSet<RoomEntity> = mutableSetOf()
) {
@Id
@GenericGenerator(name = "ulid_generator", strategy = "de.mayflower.backend.helper.UlidGenerator")
@GeneratedValue(generator = "ulid_generator")
val id: String = String()

constructor() : this(Date(), String())
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
package de.mayflower.backend.entity

import jakarta.persistence.*
import jakarta.validation.constraints.*
import org.hibernate.annotations.GenericGenerator
import java.util.Date

@Entity
@Table(name = "event")
class EventEntity(
@NotNull
@NotBlank
var name: String,

@NotNull
var description: String,

@NotNull
var location: String,

@NotNull
var startDate: Date,

@NotNull
var endDate: Date,

var url: String,

@ManyToOne(cascade = [CascadeType.ALL])
var style: Style = Style(),

@OneToMany(
//mappedBy = "event",
cascade = [CascadeType.ALL])
var days: MutableSet<DayEntity> = mutableSetOf<DayEntity>(),

@OneToMany(
//mappedBy = "event",
cascade = [CascadeType.ALL])
var sponsors: MutableSet<SponsorEntity> = mutableSetOf<SponsorEntity>(),

@OneToMany(
mappedBy = "event",
cascade = [CascadeType.ALL])
var sessions: MutableSet<SessionEntity> = mutableSetOf(),

@OneToMany(
//mappedBy = "event",
cascade = [CascadeType.ALL])
var timeSlotSizes: MutableSet<TimeslotSizeEntity> = mutableSetOf(),

) {
@Id
@GenericGenerator(name = "ulid_generator", strategy = "de.mayflower.backend.helper.UlidGenerator")
@GeneratedValue(generator = "ulid_generator")
val id: String = String()

constructor() : this(String(), String(), String(), Date(), Date(), String())

}
Original file line number Diff line number Diff line change
@@ -1,22 +1,31 @@
package de.mayflower.backend.entity

import jakarta.persistence.*
import jakarta.validation.constraints.NotNull
import org.hibernate.annotations.GenericGenerator

@Entity
@Table(name = "room")
class RoomEntity(
val name: String,
@NotNull
var name: String,

var description: String,

@ManyToMany(
//mappedBy = "room",
cascade = [CascadeType.ALL])
val days: MutableSet<DayEntity> = mutableSetOf(),

@OneToMany(
mappedBy = "room",
cascade = [CascadeType.ALL])
val sessions: MutableSet<SessionEntity> = mutableSetOf<SessionEntity>()
val timeslots: MutableSet<TimeslotEntity> = mutableSetOf()
) {
@Id
@GenericGenerator(name = "ulid_generator", strategy = "de.mayflower.backend.helper.UlidGenerator")
@GeneratedValue(generator = "ulid_generator")
val id: String = String()

constructor() : this(String())
constructor() : this(String(), String())
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,24 +13,24 @@ class SessionEntity(
var name: String,

@NotNull
@NotBlank
var abstract: String,

@NotNull
var start_timestamp: Long,
var description: String,

@NotNull
var end_timestamp: Long,
@OneToMany(
mappedBy = "session",
cascade = [CascadeType.ALL])
var timeslots: MutableSet<TimeslotEntity> = mutableSetOf(),

@ManyToOne(cascade = [CascadeType.ALL])
var room: RoomEntity = RoomEntity(),
var event: EventEntity = EventEntity(),

var description: String = String()
@ManyToMany(
cascade = [CascadeType.ALL])
var speakers: MutableSet<SpeakerEntity> = mutableSetOf(),
) {
@Id
@GenericGenerator(name = "ulid_generator", strategy = "de.mayflower.backend.helper.UlidGenerator")
@GeneratedValue(generator = "ulid_generator")
val id: String = String()

constructor() : this(String(), String(), -1, -1)
constructor() : this(String(), String())
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package de.mayflower.backend.entity

import jakarta.persistence.*
import jakarta.validation.constraints.*
import org.hibernate.annotations.GenericGenerator

@Entity
@Table(name = "speaker")
class SpeakerEntity(
@NotNull
val name: String,

@NotNull
val description: String,

@NotNull
val url: String,

@NotNull
val image: String,

@ManyToMany(cascade = [CascadeType.ALL])
val sessions: MutableSet<SessionEntity> = mutableSetOf()
) {
@Id
@GenericGenerator(name = "ulid_generator", strategy = "de.mayflower.backend.helper.UlidGenerator")
@GeneratedValue(generator = "ulid_generator")
val id: String = String()

constructor() : this(String(), String(), String(), String(), mutableSetOf())
}
Loading