general dev work, also added a bunch of examples #2
 Merged
	
	
		
		
			
		
		
		
			
		
		
			
			
				cerys
				merged 13 commits from dev into master 10 months ago
			
		
	
	
				 19 changed files with 929 additions and 463 deletions
			
			
		
								
									
										File diff suppressed because it is too large
									
								
							
						
					@ -0,0 +1,97 @@ | 
				
			|||||
 | 
					<?php | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					namespace Auxilium\Schemas; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					use Darksparrow\AuxiliumSchemaBuilder\Attributes\SchemaDocument; | 
				
			||||
 | 
					use Darksparrow\AuxiliumSchemaBuilder\Attributes\SchemaDocumentField; | 
				
			||||
 | 
					use Darksparrow\AuxiliumSchemaBuilder\Enumerators\SchemaFieldExistence; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					#[SchemaDocument( | 
				
			||||
 | 
					    Name: "case", | 
				
			||||
 | 
					    Comment: "The case object itself SHOULD not have a value" | 
				
			||||
 | 
					)] | 
				
			||||
 | 
					class CaseSchema | 
				
			||||
 | 
					{ | 
				
			||||
 | 
					    #[SchemaDocumentField( | 
				
			||||
 | 
					        Name: "title", | 
				
			||||
 | 
					        Existence: SchemaFieldExistence::SHOULD, | 
				
			||||
 | 
					        Comment: "This SHOULD be a short description of what the case is about", | 
				
			||||
 | 
					        MaxSize: 2048, | 
				
			||||
 | 
					        MimeType: "text/plain", | 
				
			||||
 | 
					    )] | 
				
			||||
 | 
					    public string $Title; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    #[SchemaDocumentField( | 
				
			||||
 | 
					        Name: "clients", | 
				
			||||
 | 
					        Existence: SchemaFieldExistence::SHOULD, | 
				
			||||
 | 
					        Comment: "This SHOULD be an 'array node' of all the clients involved in the case", | 
				
			||||
 | 
					        ValidSchemas: [ | 
				
			||||
 | 
					            CollectionSchema::class, | 
				
			||||
 | 
					        ], | 
				
			||||
 | 
					        MaxSize: 0, | 
				
			||||
 | 
					        Child: new SchemaDocumentField( | 
				
			||||
 | 
					            Name: "clients", | 
				
			||||
 | 
					            Comment: "", | 
				
			||||
 | 
					            ValidSchemas: [ | 
				
			||||
 | 
					                UserSchema::class, | 
				
			||||
 | 
					            ] | 
				
			||||
 | 
					        ), | 
				
			||||
 | 
					    )] | 
				
			||||
 | 
					    public array $Clients; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    #[SchemaDocumentField( | 
				
			||||
 | 
					        Name: "workers", | 
				
			||||
 | 
					        Existence: SchemaFieldExistence::SHOULD, | 
				
			||||
 | 
					        Comment: "This SHOULD be an 'array node' of all staff working on the case", | 
				
			||||
 | 
					        ValidSchemas: [ | 
				
			||||
 | 
					            CollectionSchema::class, | 
				
			||||
 | 
					        ], | 
				
			||||
 | 
					        MaxSize: 0, | 
				
			||||
 | 
					        Child: new SchemaDocumentField( | 
				
			||||
 | 
					            Name: "workers", | 
				
			||||
 | 
					            Comment: "", | 
				
			||||
 | 
					            ValidSchemas: [ | 
				
			||||
 | 
					                UserSchema::class, | 
				
			||||
 | 
					                OrganisationSchema::class, | 
				
			||||
 | 
					            ] | 
				
			||||
 | 
					        ), | 
				
			||||
 | 
					    )] | 
				
			||||
 | 
					    public array $Workers; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    #[SchemaDocumentField( | 
				
			||||
 | 
					        Name: "documents", | 
				
			||||
 | 
					        Existence: SchemaFieldExistence::SHOULD, | 
				
			||||
 | 
					        Comment: "This SHOULD be an 'array node' of all the case documents", | 
				
			||||
 | 
					        ValidSchemas: [ | 
				
			||||
 | 
					            CollectionSchema::class, | 
				
			||||
 | 
					        ], | 
				
			||||
 | 
					        MaxSize: 0, | 
				
			||||
 | 
					        Child: new SchemaDocumentField( | 
				
			||||
 | 
					            Name: "documents", | 
				
			||||
 | 
					            Comment: "", | 
				
			||||
 | 
					            ValidSchemas: [ | 
				
			||||
 | 
					                DocumentSchema::class, | 
				
			||||
 | 
					            ] | 
				
			||||
 | 
					        ), | 
				
			||||
 | 
					    )] | 
				
			||||
 | 
					    public array $Documents; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    #[SchemaDocumentField( | 
				
			||||
 | 
					        Name: "messages", | 
				
			||||
 | 
					        Existence: SchemaFieldExistence::SHOULD, | 
				
			||||
 | 
					        Comment: "This SHOULD be an 'array node' of all messages that relate to this case", | 
				
			||||
 | 
					        ValidSchemas: [ | 
				
			||||
 | 
					            CollectionSchema::class, | 
				
			||||
 | 
					        ], | 
				
			||||
 | 
					        MaxSize: 0, | 
				
			||||
 | 
					        Child: new SchemaDocumentField( | 
				
			||||
 | 
					            Name: "messages", | 
				
			||||
 | 
					            Comment: "", | 
				
			||||
 | 
					            ValidSchemas: [ | 
				
			||||
 | 
					                CollectionSchema::class, | 
				
			||||
 | 
					            ] | 
				
			||||
 | 
					        ), | 
				
			||||
 | 
					    )] | 
				
			||||
 | 
					    public array $Messages; | 
				
			||||
 | 
					} | 
				
			||||
 | 
					
 | 
				
			||||
@ -0,0 +1,15 @@ | 
				
			|||||
 | 
					<?php | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					namespace Auxilium\Schemas; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					use Darksparrow\AuxiliumSchemaBuilder\Attributes\SchemaDocument; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					#[SchemaDocument( | 
				
			||||
 | 
					    Name: "collection", | 
				
			||||
 | 
					    MaxSize: 0, | 
				
			||||
 | 
					    Comment: "This is intended as an inheritable schema used to signify to software that it SHOULD display the numeric properties of this node as an inlined list", | 
				
			||||
 | 
					)] | 
				
			||||
 | 
					class CollectionSchema | 
				
			||||
 | 
					{ | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					} | 
				
			||||
@ -0,0 +1,43 @@ | 
				
			|||||
 | 
					<?php | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					namespace Auxilium\Schemas; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					use Darksparrow\AuxiliumSchemaBuilder\Attributes\SchemaDocument; | 
				
			||||
 | 
					use Darksparrow\AuxiliumSchemaBuilder\Attributes\SchemaDocumentField; | 
				
			||||
 | 
					use Darksparrow\AuxiliumSchemaBuilder\Enumerators\SchemaFieldExistence; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					#[SchemaDocument( | 
				
			||||
 | 
					    Name: "document", | 
				
			||||
 | 
					    Comment: 	"Any given document SHOULD have metadata attached", | 
				
			||||
 | 
					)] | 
				
			||||
 | 
					class DocumentSchema | 
				
			||||
 | 
					{ | 
				
			||||
 | 
					    #[SchemaDocumentField( | 
				
			||||
 | 
					        Name: "file_name", | 
				
			||||
 | 
					        Existence: SchemaFieldExistence::SHOULD, | 
				
			||||
 | 
					        Comment: "The filename SHOULD NOT contain an extension, this SHOULD be added by the application based on the file's mime type", | 
				
			||||
 | 
					        MaxSize: 256, | 
				
			||||
 | 
					        MimeType: "text/plain", | 
				
			||||
 | 
					    )] | 
				
			||||
 | 
					    public string $FileName; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    #[SchemaDocumentField( | 
				
			||||
 | 
					        Name: "created", | 
				
			||||
 | 
					        Existence: SchemaFieldExistence::MAY, | 
				
			||||
 | 
					        Comment: "The creation date, if supplied MUST be in ISO 8601 format", | 
				
			||||
 | 
					        MaxSize: 64, | 
				
			||||
 | 
					        MimeType: "text/plain", | 
				
			||||
 | 
					    )] | 
				
			||||
 | 
					    public string $Created; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    #[SchemaDocumentField( | 
				
			||||
 | 
					        Name: "modified", | 
				
			||||
 | 
					        Existence: SchemaFieldExistence::MAY, | 
				
			||||
 | 
					        Comment: "The last modified date, if supplied MUST be in ISO 8601 format", | 
				
			||||
 | 
					        MaxSize: 64, | 
				
			||||
 | 
					        MimeType: "text/plain", | 
				
			||||
 | 
					    )] | 
				
			||||
 | 
					    public string $Modified; | 
				
			||||
 | 
					} | 
				
			||||
@ -0,0 +1,14 @@ | 
				
			|||||
 | 
					<?php | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					namespace Auxilium\Schemas; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					use Darksparrow\AuxiliumSchemaBuilder\Attributes\SchemaDocument; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					#[SchemaDocument( | 
				
			||||
 | 
					    Name: "enum", | 
				
			||||
 | 
					    Comment: "This is intended as an inheritable schema used to signify to software that it SHOULD be interpreted as a enumerable choice value that can be decoded based on its schema", | 
				
			||||
 | 
					)] | 
				
			||||
 | 
					class EnumSchema | 
				
			||||
 | 
					{ | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					} | 
				
			||||
@ -0,0 +1,103 @@ | 
				
			|||||
 | 
					<?php | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					namespace Auxilium\Schemas; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					use Darksparrow\AuxiliumSchemaBuilder\Enumerators\SchemaFieldExistence; | 
				
			||||
 | 
					use Darksparrow\AuxiliumSchemaBuilder\Attributes\SchemaDocument; | 
				
			||||
 | 
					use Darksparrow\AuxiliumSchemaBuilder\Attributes\SchemaDocumentField; | 
				
			||||
 | 
					use Darksparrow\AuxiliumSchemaBuilder\Interfaces\SchemaDocumentInterface; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					#[SchemaDocument( | 
				
			||||
 | 
					    Name: "organisation", | 
				
			||||
 | 
					    MaxSize: 0, | 
				
			||||
 | 
					    Comment: "The organisation object itself SHOULD not have a value", | 
				
			||||
 | 
					)] | 
				
			||||
 | 
					class OrganisationSchema | 
				
			||||
 | 
					{ | 
				
			||||
 | 
					    #[SchemaDocumentField( | 
				
			||||
 | 
					        Name: "name", | 
				
			||||
 | 
					        Existence: SchemaFieldExistence::MUST, | 
				
			||||
 | 
					        Comment: "This MUST be the organisation's name", | 
				
			||||
 | 
					        MaxSize: 2048, | 
				
			||||
 | 
					        MimeType: "text/plain", | 
				
			||||
 | 
					        Children: [ | 
				
			||||
 | 
					            new SchemaDocumentField( | 
				
			||||
 | 
					                Name: "trading_as", | 
				
			||||
 | 
					                Existence: SchemaFieldExistence::SHOULD, | 
				
			||||
 | 
					                Comment: "This SHOULD be the organisation's short trading name, or the abbreviation they would usually go by", | 
				
			||||
 | 
					                MaxSize: 256, | 
				
			||||
 | 
					                MimeType: "text/plain", | 
				
			||||
 | 
					            ) | 
				
			||||
 | 
					        ] | 
				
			||||
 | 
					    )] | 
				
			||||
 | 
					    public string $Name; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    #[SchemaDocumentField( | 
				
			||||
 | 
					        Name: "departments", | 
				
			||||
 | 
					        Existence: SchemaFieldExistence::SHOULD, | 
				
			||||
 | 
					        Comment: "This SHOULD be an 'array node' of all sub-organisations if applicable", | 
				
			||||
 | 
					        ValidSchemas: [ | 
				
			||||
 | 
					            CollectionSchema::class, | 
				
			||||
 | 
					        ], | 
				
			||||
 | 
					        MaxSize: 0, | 
				
			||||
 | 
					        Child: new SchemaDocumentField( | 
				
			||||
 | 
					            Name: "departments", | 
				
			||||
 | 
					            Comment: null, | 
				
			||||
 | 
					            ValidSchemas: [ | 
				
			||||
 | 
					                OrganisationSchema::class, | 
				
			||||
 | 
					            ], | 
				
			||||
 | 
					        ), | 
				
			||||
 | 
					    )] | 
				
			||||
 | 
					    public array $Departments; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    #[SchemaDocumentField( | 
				
			||||
 | 
					        Name: "cases", | 
				
			||||
 | 
					        Existence: SchemaFieldExistence::SHOULD, | 
				
			||||
 | 
					        Comment: "This SHOULD be an 'array node' of all the cases the organisation is either directly working on or the client of", | 
				
			||||
 | 
					        ValidSchemas: [ | 
				
			||||
 | 
					            CollectionSchema::class, | 
				
			||||
 | 
					        ], | 
				
			||||
 | 
					        MaxSize: 0, | 
				
			||||
 | 
					        Child: new SchemaDocumentField( | 
				
			||||
 | 
					            Name: "cases", | 
				
			||||
 | 
					            Comment: null, | 
				
			||||
 | 
					            ValidSchemas: [ | 
				
			||||
 | 
					                CaseSchema::class, | 
				
			||||
 | 
					            ], | 
				
			||||
 | 
					        ), | 
				
			||||
 | 
					    )] | 
				
			||||
 | 
					    public array $Cases; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    #[SchemaDocumentField( | 
				
			||||
 | 
					        Name: "staff", | 
				
			||||
 | 
					        Existence: SchemaFieldExistence::SHOULD, | 
				
			||||
 | 
					        Comment: "This SHOULD be an 'array node' of all the staff that cannot be categorised into departments, or in the case of small organisations with no departments, all staff", | 
				
			||||
 | 
					        ValidSchemas: [ | 
				
			||||
 | 
					            CollectionSchema::class, | 
				
			||||
 | 
					        ], | 
				
			||||
 | 
					        MaxSize: 0, | 
				
			||||
 | 
					        Child: new SchemaDocumentField( | 
				
			||||
 | 
					            Name: "staff", | 
				
			||||
 | 
					            Comment: null, | 
				
			||||
 | 
					            ValidSchemas: [ | 
				
			||||
 | 
					                "https://schemas.auxiliumsoftware.co.uk/v1/user.json", | 
				
			||||
 | 
					            ], | 
				
			||||
 | 
					        ), | 
				
			||||
 | 
					    )] | 
				
			||||
 | 
					    public array $Staff; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    /* | 
				
			||||
 | 
					    public function __construct(array $data) | 
				
			||||
 | 
					    { | 
				
			||||
 | 
					        $this->Name = $data["name"]; | 
				
			||||
 | 
					        $this->Departments = $data["departments"]; | 
				
			||||
 | 
					        $this->Cases = $data["cases"]; | 
				
			||||
 | 
					        $this->Staff = $data["staff"]; | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					    */ | 
				
			||||
 | 
					} | 
				
			||||
@ -0,0 +1,169 @@ | 
				
			|||||
 | 
					<?php | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					namespace Auxilium\Schemas; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					use Darksparrow\AuxiliumSchemaBuilder\Attributes\SchemaDocument; | 
				
			||||
 | 
					use Darksparrow\AuxiliumSchemaBuilder\Attributes\SchemaDocumentField; | 
				
			||||
 | 
					use Darksparrow\AuxiliumSchemaBuilder\Enumerators\SchemaFieldExistence; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					#[SchemaDocument( | 
				
			||||
 | 
					    Name: "user", | 
				
			||||
 | 
					    MaxSize: 0, | 
				
			||||
 | 
					    Comment: "The user object itself SHOULD not have a value", | 
				
			||||
 | 
					)] | 
				
			||||
 | 
					class UserSchema | 
				
			||||
 | 
					{ | 
				
			||||
 | 
					    #[SchemaDocumentField( | 
				
			||||
 | 
					        Name: "name", | 
				
			||||
 | 
					        Existence: SchemaFieldExistence::MUST, | 
				
			||||
 | 
					        Comment: "This MUST be the user's full name", | 
				
			||||
 | 
					        MaxSize: 2048, | 
				
			||||
 | 
					        MimeType: "text/plain", | 
				
			||||
 | 
					    )] | 
				
			||||
 | 
					    public string $Name; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    #[SchemaDocumentField( | 
				
			||||
 | 
					        Name: "display_name", | 
				
			||||
 | 
					        Existence: SchemaFieldExistence::SHOULD, | 
				
			||||
 | 
					        Comment: "This SHOULD be the user's first name or 'preferred' name used for UI", | 
				
			||||
 | 
					        MaxSize: 256, | 
				
			||||
 | 
					        MimeType: "text/plain", | 
				
			||||
 | 
					    )] | 
				
			||||
 | 
					    public string $DisplayName; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    #[SchemaDocumentField( | 
				
			||||
 | 
					        Name: "contact_email", | 
				
			||||
 | 
					        Existence: SchemaFieldExistence::SHOULD, | 
				
			||||
 | 
					        Comment: "This SHOULD NOT be used for unverified user input", | 
				
			||||
 | 
					        MaxSize: 512, | 
				
			||||
 | 
					        MimeType: "text/plain", | 
				
			||||
 | 
					    )] | 
				
			||||
 | 
					    public string $ContactEmail; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    #[SchemaDocumentField( | 
				
			||||
 | 
					        Name: "contact_email", | 
				
			||||
 | 
					        Existence: SchemaFieldExistence::MAY, | 
				
			||||
 | 
					        Comment: "This SHOULD be used for unverified user input instead of the 'contact_email' field", | 
				
			||||
 | 
					        ValidSchemas: [ | 
				
			||||
 | 
					            CollectionSchema::class, | 
				
			||||
 | 
					        ], | 
				
			||||
 | 
					        MaxSize: 0, | 
				
			||||
 | 
					        Child: new SchemaDocumentField( | 
				
			||||
 | 
					            Name: "auxiliary_emails", | 
				
			||||
 | 
					            MaxSize: 512, | 
				
			||||
 | 
					            MimeType: "text/plain", | 
				
			||||
 | 
					        ) | 
				
			||||
 | 
					    )] | 
				
			||||
 | 
					    public array $AuxiliaryEmails; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    #[SchemaDocumentField( | 
				
			||||
 | 
					        Name: "contact_phone_number", | 
				
			||||
 | 
					        Existence: SchemaFieldExistence::SHOULD, | 
				
			||||
 | 
					        Comment: "This SHOULD include country code, and SHOULD NOT include spaces", | 
				
			||||
 | 
					        MaxSize: 64, | 
				
			||||
 | 
					        MimeType: "text/plain", | 
				
			||||
 | 
					    )] | 
				
			||||
 | 
					    public string $ContactPhoneNumber; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    #[SchemaDocumentField( | 
				
			||||
 | 
					        Name: "auxiliary_phone_numbers", | 
				
			||||
 | 
					        Existence: SchemaFieldExistence::MAY, | 
				
			||||
 | 
					        Comment: "This SHOULD be used for phone numbers that need to be on record, but shouldn't be used for contact", | 
				
			||||
 | 
					        ValidSchemas: [ | 
				
			||||
 | 
					            CollectionSchema::class, | 
				
			||||
 | 
					        ], | 
				
			||||
 | 
					        MaxSize: 0, | 
				
			||||
 | 
					        Child: new SchemaDocumentField( | 
				
			||||
 | 
					            Name: "auxiliary_phone_numbers", | 
				
			||||
 | 
					            Comment: "This SHOULD include country code, and SHOULD NOT include spaces", | 
				
			||||
 | 
					            MaxSize: 64, | 
				
			||||
 | 
					            MimeType: "text/plain", | 
				
			||||
 | 
					        ) | 
				
			||||
 | 
					    )] | 
				
			||||
 | 
					    public array $AuxiliaryPhoneNumbers; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    #[SchemaDocumentField( | 
				
			||||
 | 
					        Name: "contact_address", | 
				
			||||
 | 
					        Existence: SchemaFieldExistence::SHOULD, | 
				
			||||
 | 
					        Comment: "This SHOULD be a full address, suitable for international postage", | 
				
			||||
 | 
					        MimeType: "text/plain", | 
				
			||||
 | 
					    )] | 
				
			||||
 | 
					    public string $ContactAddress; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    #[SchemaDocumentField( | 
				
			||||
 | 
					        Name: "auxiliary_addresses", | 
				
			||||
 | 
					        Existence: SchemaFieldExistence::MAY, | 
				
			||||
 | 
					        Comment: "This SHOULD be used for addresses that need to be on record, but shouldn't be used for contact", | 
				
			||||
 | 
					        ValidSchemas: [ | 
				
			||||
 | 
					            CollectionSchema::class, | 
				
			||||
 | 
					        ], | 
				
			||||
 | 
					        MaxSize: 0, | 
				
			||||
 | 
					        Child: new SchemaDocumentField( | 
				
			||||
 | 
					            Name: "auxiliary_addresses", | 
				
			||||
 | 
					            Comment: "This MAY be a full address, or a shortened address only suitable for local mail", | 
				
			||||
 | 
					            MimeType: "text/plain", | 
				
			||||
 | 
					        ) | 
				
			||||
 | 
					    )] | 
				
			||||
 | 
					    public array $AuxiliaryAddresses; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    #[SchemaDocumentField( | 
				
			||||
 | 
					        Name: "documents", | 
				
			||||
 | 
					        Existence: SchemaFieldExistence::SHOULD, | 
				
			||||
 | 
					        Comment: "This SHOULD be an 'array node' of all the user's documents", | 
				
			||||
 | 
					        ValidSchemas: [ | 
				
			||||
 | 
					            CollectionSchema::class, | 
				
			||||
 | 
					        ], | 
				
			||||
 | 
					        MaxSize: 0, | 
				
			||||
 | 
					        Child: new SchemaDocumentField( | 
				
			||||
 | 
					            Name: "documents", | 
				
			||||
 | 
					            ValidSchemas: [ | 
				
			||||
 | 
					                DocumentSchema::class, | 
				
			||||
 | 
					            ] | 
				
			||||
 | 
					        ) | 
				
			||||
 | 
					    )] | 
				
			||||
 | 
					    public array $Documents; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    #[SchemaDocumentField( | 
				
			||||
 | 
					        Name: "cases", | 
				
			||||
 | 
					        Existence: SchemaFieldExistence::SHOULD, | 
				
			||||
 | 
					        Comment: "This SHOULD be an 'array node' of all the cases the user is either directly working on or the client of", | 
				
			||||
 | 
					        ValidSchemas: [ | 
				
			||||
 | 
					            CollectionSchema::class, | 
				
			||||
 | 
					        ], | 
				
			||||
 | 
					        MaxSize: 0, | 
				
			||||
 | 
					        Child: new SchemaDocumentField( | 
				
			||||
 | 
					            Name: "cases", | 
				
			||||
 | 
					            ValidSchemas: [ | 
				
			||||
 | 
					                CaseSchema::class, | 
				
			||||
 | 
					            ] | 
				
			||||
 | 
					        ) | 
				
			||||
 | 
					    )] | 
				
			||||
 | 
					    public array $Cases; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    #[SchemaDocumentField( | 
				
			||||
 | 
					        Name: "messages", | 
				
			||||
 | 
					        Existence: SchemaFieldExistence::SHOULD, | 
				
			||||
 | 
					        Comment: "This SHOULD be an 'array node' of all the user's send and recieved messages", | 
				
			||||
 | 
					        ValidSchemas: [ | 
				
			||||
 | 
					            CollectionSchema::class, | 
				
			||||
 | 
					        ], | 
				
			||||
 | 
					        MaxSize: 0, | 
				
			||||
 | 
					        Child: new SchemaDocumentField( | 
				
			||||
 | 
					            Name: "messages", | 
				
			||||
 | 
					            ValidSchemas: [ | 
				
			||||
 | 
					                MessageSchema::class, | 
				
			||||
 | 
					            ] | 
				
			||||
 | 
					        ) | 
				
			||||
 | 
					    )] | 
				
			||||
 | 
					    public array $Messages; | 
				
			||||
 | 
					} | 
				
			||||
@ -0,0 +1,10 @@ | 
				
			|||||
 | 
					<phpunit | 
				
			||||
 | 
					    colors="true" | 
				
			||||
 | 
					    bootstrap="tests/bootstrap.php" | 
				
			||||
 | 
					    > | 
				
			||||
 | 
					    <testsuites> | 
				
			||||
 | 
					        <testsuite name="Darksparrow/AuxiliumSchemaBuilder Tests"> | 
				
			||||
 | 
					            <directory>tests</directory> | 
				
			||||
 | 
					        </testsuite> | 
				
			||||
 | 
					    </testsuites> | 
				
			||||
 | 
					</phpunit> | 
				
			||||
@ -1,24 +0,0 @@ | 
				
			|||||
<?php | 
					 | 
				
			||||
 | 
					 | 
				
			||||
namespace Darksparrow\AuxiliumSchemaBuilder\Attributes; | 
					 | 
				
			||||
 | 
					 | 
				
			||||
use PhpParser\Node\Attribute; | 
					 | 
				
			||||
use PhpParser\Node\Name; | 
					 | 
				
			||||
 | 
					 | 
				
			||||
#[\Attribute] | 
					 | 
				
			||||
class SchemaDocumentChildField extends Attribute | 
					 | 
				
			||||
{ | 
					 | 
				
			||||
    public string $Comment; | 
					 | 
				
			||||
    public array $ValidSchemas; | 
					 | 
				
			||||
 | 
					 | 
				
			||||
    public function __construct( | 
					 | 
				
			||||
        string $Comment, | 
					 | 
				
			||||
        array $ValidSchemas = [], | 
					 | 
				
			||||
    ) | 
					 | 
				
			||||
    { | 
					 | 
				
			||||
        $this->Comment = $Comment; | 
					 | 
				
			||||
        $this->ValidSchemas = $ValidSchemas; | 
					 | 
				
			||||
        parent::__construct(new Name("SchemaDocumentChildField"), [], []); | 
					 | 
				
			||||
    } | 
					 | 
				
			||||
 | 
					 | 
				
			||||
} | 
					 | 
				
			||||
@ -0,0 +1,8 @@ | 
				
			|||||
 | 
					<?php | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					namespace Darksparrow\AuxiliumSchemaBuilder\Interfaces; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					interface SchemaDocumentInterface | 
				
			||||
 | 
					{ | 
				
			||||
 | 
					    public function __construct(array $data); | 
				
			||||
 | 
					} | 
				
			||||
@ -0,0 +1,24 @@ | 
				
			|||||
 | 
					<?php | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					namespace Darksparrow\AuxiliumSchemaBuilder\Utilities; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					use Darksparrow\AuxiliumSchemaBuilder\Attributes\SchemaDocument; | 
				
			||||
 | 
					use ReflectionClass; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					class URLHandling | 
				
			||||
 | 
					{ | 
				
			||||
 | 
					    public static string $URLBase = "https://schemas.auxiliumsoftware.co.uk/v1/"; | 
				
			||||
 | 
					    public static function GetURLForSchema(string $targetSchemaClassName): string | 
				
			||||
 | 
					    { | 
				
			||||
 | 
					        $reflection = new ReflectionClass(new $targetSchemaClassName()); | 
				
			||||
 | 
					        foreach($reflection->getAttributes() as $attribute) | 
				
			||||
 | 
					        { | 
				
			||||
 | 
					            if($attribute->getName() === SchemaDocument::class) | 
				
			||||
 | 
					            { | 
				
			||||
 | 
					                $name = $attribute->getArguments()["Name"]; | 
				
			||||
 | 
					                return self::$URLBase . $name . ".json"; | 
				
			||||
 | 
					            } | 
				
			||||
 | 
					        } | 
				
			||||
 | 
					        throw new \Exception("Could not determine URL for schema " . $targetSchemaClassName . "."); | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					} | 
				
			||||
@ -0,0 +1,20 @@ | 
				
			|||||
 | 
					<?php | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					require_once __DIR__ . "/../examples/Schemas/Message.php"; | 
				
			||||
 | 
					require_once __DIR__ . "/../examples/Schemas/Organisation.php"; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					use Darksparrow\AuxiliumSchemaBuilder\Examples\SchemaBuilder\Schemas\Message; | 
				
			||||
 | 
					use Darksparrow\AuxiliumSchemaBuilder\Utilities\URLHandling; | 
				
			||||
 | 
					use PHPUnit\Framework\TestCase; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					final class SchemaURITest extends TestCase | 
				
			||||
 | 
					{ | 
				
			||||
 | 
					    public function test0() | 
				
			||||
 | 
					    { | 
				
			||||
 | 
					        URLHandling::$URLBase = "https://schemas.auxiliumsoftware.co.uk/v1/"; | 
				
			||||
 | 
					        self::assertEquals( | 
				
			||||
 | 
					            expected: "https://schemas.auxiliumsoftware.co.uk/v1/message.json", | 
				
			||||
 | 
					            actual: URLHandling::GetURLForSchema(Message::class), | 
				
			||||
 | 
					        ); | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					} | 
				
			||||
@ -0,0 +1,3 @@ | 
				
			|||||
 | 
					<?php | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					namespace tests; | 
				
			||||
					Loading…
					
					
				
		Reference in new issue