From 6100b9ebace11478dd423d48584d6d325062c694 Mon Sep 17 00:00:00 2001 From: Giovanni Date: Mon, 7 Sep 2026 16:15:36 +0200 Subject: [PATCH] create all the model needed --- WorldBuilder/Models/AttributeDefinition.swift | 27 +++++++++++++++ WorldBuilder/Models/AttributeType.swift | 14 ++++++++ WorldBuilder/Models/Entity.swift | 33 +++++++++++++++++++ WorldBuilder/Models/EntityType.swift | 27 +++++++++++++++ WorldBuilder/Models/Relation.swift | 31 +++++++++++++++++ WorldBuilder/Models/RelationEndpoint.swift | 14 ++++++++ WorldBuilder/Models/World.swift | 3 ++ WorldBuilder/Models/WorldEntityType.swift | 29 ++++++++++++++++ 8 files changed, 178 insertions(+) create mode 100644 WorldBuilder/Models/AttributeDefinition.swift create mode 100644 WorldBuilder/Models/AttributeType.swift create mode 100644 WorldBuilder/Models/Entity.swift create mode 100644 WorldBuilder/Models/EntityType.swift create mode 100644 WorldBuilder/Models/Relation.swift create mode 100644 WorldBuilder/Models/RelationEndpoint.swift create mode 100644 WorldBuilder/Models/WorldEntityType.swift diff --git a/WorldBuilder/Models/AttributeDefinition.swift b/WorldBuilder/Models/AttributeDefinition.swift new file mode 100644 index 0000000..9823bf6 --- /dev/null +++ b/WorldBuilder/Models/AttributeDefinition.swift @@ -0,0 +1,27 @@ +// +// AttributeDefinition.swift +// WorldBuilder +// +// Created by Giovanni Josserand on 06/09/2026. +// + +import SwiftData +import Foundation + +@Model +class AttributeDefinition { + var id: UUID + var createdAt: Date + var updatedAt: Date + + var name : String + var type : AttributeType + + init(name: String, type: AttributeType){ + self.id = UUID() + self.createdAt = Date() + self.updatedAt = Date() + self.name = name + self.type = type + } +} diff --git a/WorldBuilder/Models/AttributeType.swift b/WorldBuilder/Models/AttributeType.swift new file mode 100644 index 0000000..15b07f2 --- /dev/null +++ b/WorldBuilder/Models/AttributeType.swift @@ -0,0 +1,14 @@ +// +// AttributeType.swift +// WorldBuilder +// +// Created by Giovanni Josserand on 06/09/2026. +// + +enum AttributeType : nonisolated Codable { + case string + case int + case double + case bool + case date +} diff --git a/WorldBuilder/Models/Entity.swift b/WorldBuilder/Models/Entity.swift new file mode 100644 index 0000000..a902851 --- /dev/null +++ b/WorldBuilder/Models/Entity.swift @@ -0,0 +1,33 @@ +// +// Entity.swift +// WorldBuilder +// +// Created by Giovanni Josserand on 05/09/2026. +// + +import SwiftData +import Foundation + +@Model +class Entity { + var id : UUID + var createdAt : Date + var updatedAt : Date + + var name : String + var world : World + var worldEntityType : WorldEntityType + @Relationship var enabledLocalAttributeDefinitions = [AttributeDefinition]() + @Relationship var personalAttributeDefinitions = [AttributeDefinition]() + + + + init(name: String, world: World, worldEntityType: WorldEntityType){ + self.id = UUID() + self.createdAt = Date() + self.updatedAt = Date() + self.name = name + self.world = world + self.worldEntityType = worldEntityType + } +} diff --git a/WorldBuilder/Models/EntityType.swift b/WorldBuilder/Models/EntityType.swift new file mode 100644 index 0000000..317a3a8 --- /dev/null +++ b/WorldBuilder/Models/EntityType.swift @@ -0,0 +1,27 @@ +// +// EntityType.swift +// WorldBuilder +// +// Created by Giovanni Josserand on 05/09/2026. +// + +import SwiftData +import Foundation + +@Model +class EntityType { + var id : UUID + var createdAt : Date + var updatedAt : Date + + var name : String + @Relationship var globalAttributeDefinitions = [AttributeDefinition]() + + + init(name: String) { + self.id = UUID() + self.createdAt = Date() + self.updatedAt = Date() + self.name = name + } +} diff --git a/WorldBuilder/Models/Relation.swift b/WorldBuilder/Models/Relation.swift new file mode 100644 index 0000000..24302b8 --- /dev/null +++ b/WorldBuilder/Models/Relation.swift @@ -0,0 +1,31 @@ +// +// Relation.swift +// WorldBuilder +// +// Created by Giovanni Josserand on 06/09/2026. +// + +import SwiftData +import Foundation + +@Model +class Relation{ + var id : UUID + var createdAt : Date + var updatedAt : Date + + var label : String + var source : RelationEndpoint + var target : RelationEndpoint + var world : World + + init(label: String, source : RelationEndpoint, target : RelationEndpoint, world : World){ + self.id = UUID() + self.createdAt = Date() + self.updatedAt = Date() + self.label = label + self.source = source + self.target = target + self.world = world + } +} diff --git a/WorldBuilder/Models/RelationEndpoint.swift b/WorldBuilder/Models/RelationEndpoint.swift new file mode 100644 index 0000000..757f6cd --- /dev/null +++ b/WorldBuilder/Models/RelationEndpoint.swift @@ -0,0 +1,14 @@ +// +// RelationEndpoint.swift +// WorldBuilder +// +// Created by Giovanni Josserand on 06/09/2026. +// + +import Foundation + +enum RelationEndpoint : nonisolated Codable, Equatable { + case entityType(id: UUID) + case worldEntityType(id: UUID) + case entity(id: UUID) +} diff --git a/WorldBuilder/Models/World.swift b/WorldBuilder/Models/World.swift index 3cff42f..aa734a8 100644 --- a/WorldBuilder/Models/World.swift +++ b/WorldBuilder/Models/World.swift @@ -13,9 +13,12 @@ class World { var id : UUID var createdAt : Date var updatedAt : Date + var name : String var overview : String @Attribute(.externalStorage) var illustrationData : Data? + @Relationship var relations = [Relation]() + init(name: String, overview: String, illustrationData: Data?) { self.id = UUID() diff --git a/WorldBuilder/Models/WorldEntityType.swift b/WorldBuilder/Models/WorldEntityType.swift new file mode 100644 index 0000000..6eed12f --- /dev/null +++ b/WorldBuilder/Models/WorldEntityType.swift @@ -0,0 +1,29 @@ +// +// WorldEntityType.swift +// WorldBuilder +// +// Created by Giovanni Josserand on 06/09/2026. +// + +import SwiftData +import Foundation + +@Model +class WorldEntityType { + var id : UUID + var createdAt : Date + var updatedAt : Date + + var world : World + var entityType : EntityType + @Relationship var enabledGlobalAttributeDefinitions = [AttributeDefinition]() + @Relationship var localAttributeDefinitions = [AttributeDefinition]() + + init(world: World, entityType: EntityType){ + self.id = UUID() + self.createdAt = Date() + self.updatedAt = Date() + self.world = world + self.entityType = entityType + } +}