- bookings: [PPT-1781] ignore clash check forvisitor booking (#284)
- bookings: [PPT-1846] add all_day bool flag (#283)
- settings: validate yaml to json conversion [PPT-1873] (#282)
- booking: correct start and end times in instance
- tenant: parent_id helpers
- asset_type: images is nilable in the database (#281)
- tenant: delegate tenant configuration (#280)
- bookings: prefix checked_in with bookings in sql (#279)
- PPT-54 Add full text search capabilities to guest model (#278)
- bookings: booking_recurrences may not be filled
- PPT-1622 Add auth tokens cleanup code (#277)
- booking: recurring booking clash check (#276)
- PPT-642 Added place_id attribute in zone model (#275)
- booking: provide a helper for filtering checked in/out instances
- booking: fix is_checked_in query
- Booking: clashing should not inspect checked out bookings
- user: [PPT-1484] format of work_preferences and work_overrides (#274)
- playlist: make 0 the default playlist animation
- control_system: include playlist updated at in cache bust
- playlist/item: update playlists when an item is changed
- control_system: playlists_last_updated using created at
- playlist/item: update playlists when media is deleted
- PPT-1475 mark Trigger fields to ignore from ES index (#273)
- booking: change induction to an enum (#272)
- booking: prevent save if instance is set
- playlist: valid from and until field types
- authority: Add migration script to set defaults (#271)
- authority: email_domains should handle nilable
- migrations: add default to email_domains
- playlist/item: add video length (#270)
- PPT-1470 Add email domain feature to Authority model (#269)
- booking: [PPT-1405] update approved/rejected fields on child bookings (#267)
- crystal 1.13 scope issue
- base/associations: macro type resolution error
- remove openapi-generator
- event_metadata: add permission field (#266)
- booking: add timezone validation
- PPT-1437 Add early_check field to Tenant model (#265)
- booking: ensure clash check is appropriately scoped
- booking: add helpers for paginating recurrences
- bookings: transparent booking instance modification
- bookings: add recurring support to bookings (#263)
- PPT-1413 Add error flag to Repository model (#264)
- module: make error indicator fields as read-only (#262)
- PPT-1321 Update module model (#260)
- booking: #by_user_or_email include open and public permissions (#261)
- booking: [PPT-1267] add induction field (#259)
- shortener: add some rand and validation
- shortener: add URL shortening model (#258) [PPT-1272]
- booking: [PPT-1215] add permission field (#256)
- driver: remove flag if commits match (#257)
- migrations: signage migration
- playlist: add helpers for updating metrics
- playlist/item: requires authority scope
- add digital signage models (#255) [PPT-1040]
- booking: [PPT-1213] add images (#254)
- booking: can't clash if deleted
- PPT-1224 Add secret_expiry attribute to tenant model (#253)
- bookings: prevent start and end times being the same
- booking: expose format_list_for_postgres
- bookings: split out unique ids
- bookings: details specs for desired behaviour [PROJ-636] (#252)
- bookings: improve update_assets
- booking: ensure all asset ids are unique in the booking
- survey: make Survey::Invitation.list(sent: false) return unsent invites (#251)
- booking: #clashing? with asset_ids (#250)
- zone: [PPT-1154] remove unused field (#248)
- zone: [PPT-1154] add auto_release (#247)
- model: DBHashConverter (#246)
- user: change WorktimePreference day to day_of_week (#245)
- users: [PPT-1148] work_preferences default (#244)
- user: work_preferences need to be public
- wfh: [PPT-1148] add work_preferences to user model (#243)
- guest: don't pick a meeting that has ended
- guest: checked_in is never null
- guest: order by the earliest starting booking
- guest: need to ensure the joins have a result
- guest: attending today query
- event_metadata: metadata migration
- event_metadata: add an additional query
- event_metadata: allows lookup of recurring master events (#241) [PPT-1072]
- guest: remove property overload
- bookings: remove ambiguity on extension_data
- bookings: checked in status on booking guests (#240)
- event_metadata: include guest list in linked bookings
- PPT-1113 add collection serialization logic (#239)
- control_system: should only remove modules only in system [PPT-1102] (#238)
- PPT-1098 Add support of multiple assets per booking (#237)
- PPT-1077 add user login stats (#236)
- PPT-1085 Add OpenAI Tool Call support (#235)
- PPT-1038 Driver update required logic (#234)
- chat_message: track token usage
- migration order due to commit merge
- event_metadata: change setup_event_id and breakdown_event_id data type in DB (#233)
- PPT-568 Added Models for ChatBot (#232)
- attendee: resolve compile issue
- attendee: ensure booking checked in if guest is (#230)
- event_metadata: add setup/breakdown time (#229)
- migrations: move id indexes to hash indexes
- migrations: add index on bookings parent_id
- booking: check for clashing in a transaction PPT-931 (#228)
- PPT-864 Added fields to capture online and last seen activity (#227)
- event_metadata: render rejected bookings
- api_key: allow string or integer for setting permissions
- api_key: allow field to be nillable
- api_key: public json to return permissions as a string
- api_key: deal with nil values in the database
- api_key: allow permissions to be nil
- api_key: default permissions to be user
- Enum::ValueConverter: support nilable integer enums
- api_key: permissions are stored as an integer in the database
- upload: ensures upload file names are valid across systems (#226)
- storage: fix mime types getting overwritten issue (#224)
- storage: clean extension prior to filter
- storage: Added file extension and mime filter attributes (#223)
- survey: make Survey::Invitation.list return unsent invites if their sent state is null in the DB and sent = false is passed to the function (#222)
- control_system: reject invalid module ids at save (#221)
- zone: find root zone id without being persisted (#220)
- PPT-767 File Upload models for Storage and Upload (#219)
- Add skip_authorization field to the Doorkeeper (#218)
- zone: add root zone finding helper
- guest: attending check
- PPT-729: Add missing FK cascade delete to FKs (#217)
- migrations: added pgsql as language for PG func
- migrations: multi-line statement, updated spec PG version to 15
- migrations: PPT-53 add index on metadata details
- migrations: ensure unique_domain constraint does not exist
- tenants_domain migration
- migrations: ensure unique constraint removed
- tenant: email_domain should be set on create / update
- asset_type: include asset counts in responses (#215)
- asset: add barcode field (#212)
- EpochConverter#from_json
- migrations: added checks
- module: edge_id lookup query
- tenant: add multi-tenant per domain support (#213)
- migrations: PPT-431, 432 additional indices (#211)
- event_metadata: linked bookings spec
- event_metadata: add flag for rendering linked bookings
- link assets to zones and clean up bookings (#210)
- booking: linked? inverted
- booking: add is_booking_type scope
- link bookings to events (#209)
- asset_manager: change ids to strings (#208)
- user: update cleanup_auth_tokens with updated relations name
- asset: [PPT-334] elastic search index (#207)
- staff-api: PPT-387 staff api implement linked bookings child parent relationship (#205)
- asset: new asset manager models (#204)
- migrations: incorrect trigger table name
- migrations: Sync migrations from init
- associations: serialize should default to true
- migrations: add db level constraints to trig table (#203)
- added models for staff-api (#201)
- control_system: remove feature auto-population PPT-392 (#202)
- user_jwt: always ensure email is downcased
- added to_rs method and support for dealing with nilable value in EnumConverter (#200)
- base/jwt: generate public key from private (#199)
- user: adjust optional fields
- merge commit fb436e breaks asset and asset_instance (#198)
- migrate models to postgres via pg-orm (#188)
- control_system: add public flag (#196)
- user: expose email and phone number (#195)
- asset: time fields should be unix epochs at the API level (#194)
- docker-compose file entry for shard.yml.input (#187)
- email: store emails downcased for simplified querying (#186)
- module:
resolved_name_changed?
- user: user metadata should be available to authenticated users (#181)
- metadata: remove queries and optimize uniqueness check (#180)
- user: add admin_metadata json output (#179)
- extracted json-merge-patch to a shard
- executable: short commit (#177)
- executable: pull in
error
- add
PlaceOS::Model::Executable
- repository: pull! should use deployed_commit_hash (#176)
- repository: add deployed_commit_hash (#175)
- metadata: add
Metadata.query_count
- metadata: add pagination (#174)
- edge: add
#to_key_json
(#173)
- edge: optional
user_id
in create interface
- metadata: expose merge in
assign_from_interface
Metadata#details
merge (#172)
- user: expose
staff_id
(#171)
- generator: typo in the generator
- spec/generator: remove call to
inspect_error
- metadata#query: allow
@
and
- last_modified: prevent assignment of
modified_by_id
- last_modified: ensure
modified_by_id
is serialised (#169)
- User#find_by_email: digest was not used (#168)
- metadata:
parent_id
could be nil
- metadata: faster name queries
- metadata: implement queries (#164)
- version: missing import
- last_modified: skip warn for versions
- metadata: skip parent validation if no
parent_id
(#162)
- metadata: typo
- Metadata.user_can_create?: looser
parent_id
restriction (#161)
- metadata: creation/update helpers (#160)
- resolve a missing symbol
- model: produce model schema (#158)
- metadata: add
Metadata.build_history
(#159)
- metadata: add
id
toMetadata::Interface
(#157)
- versions: add
#history_count
- metadata: validate parent exists (#155)
- versions#history: restore
offset
andlimit
(#154)
- metadata: add
#history
(#153)
- update active-model and rethinkdb-orm (#152)
- add
modified_at
andmodified_by
to Settings and Metadata (#148)
- change path of converters (#149)
- scope errors, add missing require
- api_key: no error if SaaS key already exists, add
public
scope to key (#147)
- edges: pass
user_id
in create
- edge: add
user_id
toCreateBody
- edge: save ApiKey in create callback
- edge: move key clean-up to
save!
(#145)
- edge: add edge-control scope (#143)
- edge api key (#141)
- add openapi-serializable (#142)
- error: better scope errors (#138)
- user: add department and preferred_language (#140)
- settings: return previous order of settings (#139)
- settings: merge down encryption levels (#137)
- user model: expose the deleted flag (#135)
- repository: add release flag for loader (#134)
- add models required for asset manager (#130)
- asset_instance: add missing name attribute (#133)
- base jwt: allow optional validation (#131)
- user: annotation on email attribute
- more detailed log about which secret is unset
- encryption: expose the secret in the arguments (#128)
- implement
ApiKey.saas_api_key
(#126)
- user: extend look up methods (#127)
- generator:metadata: typo (#125)
- module: don't fail to merge all settings (#124)
- settings_helper: add
#settings_hierarchy
- settings: improve YAML validation (#121)
- settings: improve YAML validation
- api_key: set es_types for complex types
- user: add Email struct (#123)
- repository: remove
key
- settings: improve parent look up
- user: perform a case insensitive email lookup
- user_jwt: rename undefined constant
- add scope struct to jwt (#111)
- add helpers for rendering
- add API key model
- ensure ID is returned in the JSON response
- edge decrypt method
- don't double up on authority_id
- specs and use SHA512 as bcrypt is too slow
- repository: check presence before encrypting
- set es-type for schema fields
- user:
to_groups_json
- doorkeeper: ensure uniqueness of name + URL
name
es_type
-
use
define_to_json
-
name
es_type"
- ensure unique zone names
- add UserJWT as type to decrypt for
- remove focus true
-
repository: encryption for
password
,token
-
models: correct es types
-
"chore: remove docs key from .gitignore"
- version: add platform_version
- move default args to last
- ci/publish:
crystal tool docs
->crystal docs
- version: use string for date field
- add a
Version
struct for use across all services
- move to using a JSON schema table
- add support for storing JSON schema
- add the schema generator
- use an object instead of parsing the default
- move json schema to metadata
- supply default
- supply default
- trigger conditions: add support for timezones in CRON
- user: ensure an admin user remains present
- trigger/conditions/comparison: use record for StatusVariable
- trigger/conditions/comparison: use enum for operator validation
- authority: allow raw domains to be set
- generator: correct arguments for JWT mock
- zone: add
.with_tag
query
- edge: ensure seperator not present in secret or id
- control_system: log on module removal
- error: add cause
- user_auth_lookup: set new_flag in generate_id callback
- edge: remove
_
from secret to prevent splits on the char - settings: validate
settings_string
- trigger:actions: cleanup
- trigger:conditions: cleanup
- user_jwt: cleanup duplicate attributes
- zone: touch up accessors
- control_system: tidy up accessors
- settings_spec: remove redundant rescues
- settings: reorder file
- module: force no tls only when udp (#79)
- repository: correctly serialise to_reql
- base/model: submodels were not correctly serialising to reql
- driver:role: define to_json on enum
- driver: value converter for driver role
- fully qualify converters
- workflows crystal.yml: ignore crystal version
- user_jwt: slight clean up
- metadata: add schema field
- driver: add field for compilation output
- validation: add a helper for URI validation
- control_system: add images[] to hold references to image URLs
- edge: catch errors from invalid base64
- interface: explicitly set a pull commit
- module: minor style change
- user: add a bulk user by email query
- user: selective update for admin managed fields
- control_system: conform to new delete interface
- user: prevent mass assignment of privilege
- edge: deprecate
validate_token
in favour ofvalidate_token?
- user: publically expose user's groups
- user: clean up and organisation of methods
- use has_control? getter that checks presence of association
- model:module: change type hint on ip
- edge: base64 token
- edge: add token validation
- edge: add token generation method
- edge: prevent mass assignment of edge secret
- incorrect elasticsearch type hint
- edge: encryption methods on field basis, add check?
- encryption: add
check?
to compare a plaintext value against ciphertext - edge: secret validation
- module: fetch modules by edge_id
- module: ensure only logic modules have parent systems
- repository: validate no spaces in
folder_name
- metadata: add editors to record interface
- metadata: add editors field
- module: edge import
- module: add edge hint to module
- edge: add edge model that represents an edge node
- metadata: add support for user level metadata
- user: rename clashing field to
misc
- user: has_many metadatas to not clash with local metadata
- encryption: move encryption visibility logic to
Level
enum - settings: use
Encryption.decrypt_for
helper
- module: #logic_for query by parent control_system
- typos
- jwt: default to PUBLIC_KEY in decode and PRIVATE_KEY in encode
- user-jwt: add scope field
- user-jwt: initialize scope
- user: staff_id and login_name don't enforce uniquness
- user_jwt: jwt includes user roles
- control-system: add timezone field
- module: #resolved_name should not be nillable
- set subfield keyword for name attributes
- user: protect some attributes related to user roles
- metadata: serialize
Metadata#details
to String - use updated rethink-orm
- add access token fields and expose additional fields
- oauth authentication: additional fields to support google
- control_system: remove module from features in
remove_module
- module: role case statement
- repository: add
branch
field
- settings: raise Model::Error on failed parse
- use
case...in
overcase...when
where possible
- metadata: make parent_id optional on interface
- metadata: scope query under correct table; add specs
- metadata: generic metadata model
- metadata: include JSON::Serializable in interface record
- metadata: rename
Response
toInterface
; set non-nillable fields - user jwt: admin should be considered support
- user: password saving on JSON parse (#33)
- doorkeeper-app: use UID as id, if id not generated
- user: add groups attribute
- authority: destroy dependent users, oauth strats, ldap strats, and saml strats
- control-system: generate resolved module names (#29)
- encryption: use
Digest#final
- repository: destroy dependent drivers on destroy
- shard.yml: duplicate version field
- broker: correct default port for non-tls connections
- rename top-level import
placeos-models
(#23) - broker:
ip
->host
, validate presence of conneciton information
- broker: sanitize a string dependent on Broker's filters
- broker: validate filters
- broker: model::Broker base implementation
- broker: use secret rather than a public scope as key for HMAC
- broker: drop lazy enum proc, drop intermediate hash when rendering filter errors
- improve doorkeeper app UID generation
- utilities:encryption: use
PLACE_SERVER_SECRET
env var
- doorkeeper_app: only set uid if empty
- doorkeeper application: UID is an MD5 of the redirect
- authority: default to argument if URI fails to parse host in
find_by_domain
- authority: remove prefix of
login_url
- authority: only save host of domain
- user: add missing indices
- statistics: add stats model
- user: catch auth cleanup failures
- statistics spec: ensure ttl isn't nil
- add some common metadata
- user: add auth token cleanup
- user_auth_lookup: clean up on user destroy
- repository: reql serialisation for
ensure_unique
- user_spec: remove destroy spec
- repository: add note about scoping unique check
- repository: folder name uniquness
- repository: folder name uniqueness scoping
- settings: enum_attribute ParentType and rearrange to allow symbol resolution
- rest-api dependencies
- dependencies
- driver: recompilation helpers
- repository: use 'HEAD' over 'head'
- control_system: methods for adding/removing a module
- zone-metadata: add support zone metadata
- settings:
Settings#dependent_modules
- module:
Module.in_zone
andModule.in_control_system
- zone: add support for hierarchies
- control_system: add
Model::ControlSystem#settings_hierarchy
- module: add module to ControlSystem if control_system_id is set
- uniqueness checks should be scoped appropriately
- zone spec: children iterator
- control_system: don't raise on missing zone in
ControlSystem#settings_hierarchy
- settings#history: return versions in descending creation time, create version after save
- module: driver could be nil
- module: ensure name and role are configured correctly
- user: don't allow mass assignment of digests
- module: extract hierarchy from generation of merged_settings
- add explicit imports to improve single model imports
- settings_helper: remove macro hack
- use
reverse!
where appropriate - settings: optimise
Settings.master_settings_query
- control_system: ensure_unique destructively transforms
ACAEngine
->PlaceOS
,engine-models
->models
- authentication: add models used for specifying auth sources
- user_spec: apply
JSON.parse
to json string rather than NamedTuple - subset_json: remove call to
to_json
- driver: remove
version
field in favour of commit hash
- doorkeeper: add doorkeeper application model to crystal
- user: add bcrypt password support
- update driver roles to include websocket
- add exec_enabled attribute
- settings:
is�_encrypted?
helper - settings:
get_setting_for?
- settings: implement various queries
- module: updated
merge_settings
- settings: settings helpers
- settings: implement base of Settings model
- module: driver's
module_name
in Module asname
- driver: repository required on driver
- seperate models from api
- doorkeeper app: use UInt64 to represent revoked time
- doorkeeper app: Bool not Boolean
- authority: add timestamps and use
JSON::Any
- repository: fix conflict between
type
fields in elastic search by renameing torepo_type
- trigger: add additional supported webhook methods
- settings: nillable hash conversion for empty 'settings_string'
- repository|driver: correct foreign key for Repository + Driver AssociationCollection
- trigger: constant should be 64bits to match JSON
- settings: identity block
- settins: macro workaround due to generic module compiler bug
- spec:generator: exhaustive case is not a thing yet
- module: boolean defaults for udp and tls
- correct imports
- fix imports, move encryption
- explicitly state foreign key of associations
- trigger webhook: merge webhook fields into root of trigger
- trigger: simplify webhook submodel
- settings: redundant over-ride of association setters