@startuml Base Log
Title Base Log

class Athlete {
class Jumper {
id : uuidv4
name : string
password : string
email : string
instructors : [Athlete]
baseStart : string
instructor : string
places : [Place]
age : number
age : string
gender : string
jumps : [Jump]
jumps : [Log.jumpNumber]

constructor(name : string, email : string, password : string, instructor : [], places : [])
constructor(id : uuidv4, name : string, email : string, password : string)

addJump(Jump)
' Verify: if that place exists
' Verify: if you are linked in date and place with a Jump
}
' A jumper can have one or more histories
addHistory(History)
class Jump {
type: BASE
athletes : [Athlete]
place: Place
date : Date
' this is a sinopse
description: string
diaryEntries: [DiaryEntry]

constructor (type : BASE, athletes : [], place : Place, date : Date)
}
class DiaryEntry {
  athlete: Athlete
  jump: Jump
  ' this is the full history text
  text: string
  attachments: [Image | Video | Audio]
}

' Place is static, works on it's own
class Place {
placeName : string
type : string
height : number
coordinates : [number, number]
landing : string
}

' History is what goes to the timeline
class History {
description: string
' Instead of repeating the Log infos
addLog(Log)
}

class Log {
jumper : uuidv4
year : Date
' jumpNumber is a counter
jumpNumber : number
place: place

constructor (jumper, year, jumpNumber, place)
}

' Head *- Hand : composition
' Parent o-- IndependentChild : agregation
' Need --> Use : association

Jumper -> Place : nedd a place to jump
Jumper *- Log : jumper's diary
Jumper -> History : can have history

History --> Log : need info from log

Place -> Jumper : need jumper to have history
Place --> History : history about a place


@enduml



