Просмотр исходного кода

feat(unit): adiciona contrato, socios e imagem em unidade

ebagabee 2 недель назад
Родитель
Сommit
e333cdb1bd

+ 110 - 101
.phpstorm.meta.php

@@ -819,6 +819,8 @@
             'app.aliases.Validator' => 'string',
             'app.aliases.View' => 'string',
             'app.aliases.Vite' => 'string',
+            'app.franchisor_url' => 'string',
+            'app.franchisee_url' => 'string',
             'auth.defaults.guard' => 'string',
             'auth.defaults.passwords' => 'string',
             'auth.guards.web.driver' => 'string',
@@ -988,7 +990,7 @@
             'filesystems.disks.s3.endpoint' => 'NULL',
             'filesystems.disks.s3.use_path_style_endpoint' => 'boolean',
             'filesystems.disks.s3.throw' => 'boolean',
-            'filesystems.links./home/softpar/SoftP/repos/laravel_skeleton/public/storage' => 'string',
+            'filesystems.links./home/ghalves/workspace/ginastica_cerebro/api/public/storage' => 'string',
             'logging.default' => 'string',
             'logging.deprecations.channel' => 'NULL',
             'logging.deprecations.trace' => 'boolean',
@@ -1042,9 +1044,9 @@
             'mail.mailers.smtp.url' => 'NULL',
             'mail.mailers.smtp.host' => 'string',
             'mail.mailers.smtp.port' => 'string',
-            'mail.mailers.smtp.encryption' => 'NULL',
-            'mail.mailers.smtp.username' => 'NULL',
-            'mail.mailers.smtp.password' => 'NULL',
+            'mail.mailers.smtp.encryption' => 'string',
+            'mail.mailers.smtp.username' => 'string',
+            'mail.mailers.smtp.password' => 'string',
             'mail.mailers.smtp.timeout' => 'NULL',
             'mail.mailers.smtp.local_domain' => 'string',
             'mail.mailers.ses.transport' => 'string',
@@ -1235,6 +1237,8 @@
             'app.aliases.Validator' => 'string',
             'app.aliases.View' => 'string',
             'app.aliases.Vite' => 'string',
+            'app.franchisor_url' => 'string',
+            'app.franchisee_url' => 'string',
             'auth.defaults.guard' => 'string',
             'auth.defaults.passwords' => 'string',
             'auth.guards.web.driver' => 'string',
@@ -1404,7 +1408,7 @@
             'filesystems.disks.s3.endpoint' => 'NULL',
             'filesystems.disks.s3.use_path_style_endpoint' => 'boolean',
             'filesystems.disks.s3.throw' => 'boolean',
-            'filesystems.links./home/softpar/SoftP/repos/laravel_skeleton/public/storage' => 'string',
+            'filesystems.links./home/ghalves/workspace/ginastica_cerebro/api/public/storage' => 'string',
             'logging.default' => 'string',
             'logging.deprecations.channel' => 'NULL',
             'logging.deprecations.trace' => 'boolean',
@@ -1458,9 +1462,9 @@
             'mail.mailers.smtp.url' => 'NULL',
             'mail.mailers.smtp.host' => 'string',
             'mail.mailers.smtp.port' => 'string',
-            'mail.mailers.smtp.encryption' => 'NULL',
-            'mail.mailers.smtp.username' => 'NULL',
-            'mail.mailers.smtp.password' => 'NULL',
+            'mail.mailers.smtp.encryption' => 'string',
+            'mail.mailers.smtp.username' => 'string',
+            'mail.mailers.smtp.password' => 'string',
             'mail.mailers.smtp.timeout' => 'NULL',
             'mail.mailers.smtp.local_domain' => 'string',
             'mail.mailers.ses.transport' => 'string',
@@ -1651,6 +1655,8 @@
             'app.aliases.Validator' => 'string',
             'app.aliases.View' => 'string',
             'app.aliases.Vite' => 'string',
+            'app.franchisor_url' => 'string',
+            'app.franchisee_url' => 'string',
             'auth.defaults.guard' => 'string',
             'auth.defaults.passwords' => 'string',
             'auth.guards.web.driver' => 'string',
@@ -1820,7 +1826,7 @@
             'filesystems.disks.s3.endpoint' => 'NULL',
             'filesystems.disks.s3.use_path_style_endpoint' => 'boolean',
             'filesystems.disks.s3.throw' => 'boolean',
-            'filesystems.links./home/softpar/SoftP/repos/laravel_skeleton/public/storage' => 'string',
+            'filesystems.links./home/ghalves/workspace/ginastica_cerebro/api/public/storage' => 'string',
             'logging.default' => 'string',
             'logging.deprecations.channel' => 'NULL',
             'logging.deprecations.trace' => 'boolean',
@@ -1874,9 +1880,9 @@
             'mail.mailers.smtp.url' => 'NULL',
             'mail.mailers.smtp.host' => 'string',
             'mail.mailers.smtp.port' => 'string',
-            'mail.mailers.smtp.encryption' => 'NULL',
-            'mail.mailers.smtp.username' => 'NULL',
-            'mail.mailers.smtp.password' => 'NULL',
+            'mail.mailers.smtp.encryption' => 'string',
+            'mail.mailers.smtp.username' => 'string',
+            'mail.mailers.smtp.password' => 'string',
             'mail.mailers.smtp.timeout' => 'NULL',
             'mail.mailers.smtp.local_domain' => 'string',
             'mail.mailers.ses.transport' => 'string',
@@ -2056,77 +2062,78 @@
 'app.aliases.Queue','app.aliases.RateLimiter','app.aliases.Redirect','app.aliases.Request','app.aliases.Response',
 'app.aliases.Route','app.aliases.Schedule','app.aliases.Schema','app.aliases.Session','app.aliases.Storage',
 'app.aliases.Str','app.aliases.URL','app.aliases.Uri','app.aliases.Validator','app.aliases.View',
-'app.aliases.Vite','auth.defaults.guard','auth.defaults.passwords','auth.guards.web.driver','auth.guards.web.provider',
-'auth.guards.sanctum.driver','auth.guards.sanctum.provider','auth.providers.users.driver','auth.providers.users.model','auth.passwords.users.provider',
-'auth.passwords.users.table','auth.passwords.users.expire','auth.passwords.users.throttle','auth.password_timeout','broadcasting.default',
-'broadcasting.connections.reverb.driver','broadcasting.connections.reverb.key','broadcasting.connections.reverb.secret','broadcasting.connections.reverb.app_id','broadcasting.connections.reverb.options.host',
-'broadcasting.connections.reverb.options.port','broadcasting.connections.reverb.options.scheme','broadcasting.connections.reverb.options.useTLS','broadcasting.connections.reverb.client_options','broadcasting.connections.pusher.driver',
-'broadcasting.connections.pusher.key','broadcasting.connections.pusher.secret','broadcasting.connections.pusher.app_id','broadcasting.connections.pusher.options.cluster','broadcasting.connections.pusher.options.host',
-'broadcasting.connections.pusher.options.port','broadcasting.connections.pusher.options.scheme','broadcasting.connections.pusher.options.encrypted','broadcasting.connections.pusher.options.useTLS','broadcasting.connections.pusher.client_options',
-'broadcasting.connections.ably.driver','broadcasting.connections.ably.key','broadcasting.connections.log.driver','broadcasting.connections.null.driver','broadcasting.connections.redis.driver',
-'broadcasting.connections.redis.connection','cache.default','cache.stores.array.driver','cache.stores.array.serialize','cache.stores.database.driver',
-'cache.stores.database.table','cache.stores.database.connection','cache.stores.database.lock_connection','cache.stores.file.driver','cache.stores.file.path',
-'cache.stores.file.lock_path','cache.stores.memcached.driver','cache.stores.memcached.persistent_id','cache.stores.memcached.sasl','cache.stores.memcached.options',
-'cache.stores.memcached.servers.0.host','cache.stores.memcached.servers.0.port','cache.stores.memcached.servers.0.weight','cache.stores.redis.driver','cache.stores.redis.connection',
-'cache.stores.redis.lock_connection','cache.stores.dynamodb.driver','cache.stores.dynamodb.key','cache.stores.dynamodb.secret','cache.stores.dynamodb.region',
-'cache.stores.dynamodb.table','cache.stores.dynamodb.endpoint','cache.stores.octane.driver','cache.prefix','cors.paths',
-'cors.allowed_methods','cors.allowed_origins','cors.allowed_origins_patterns','cors.allowed_headers','cors.exposed_headers',
-'cors.max_age','cors.supports_credentials','database.default','database.connections.sqlite.driver','database.connections.sqlite.url',
-'database.connections.sqlite.database','database.connections.sqlite.prefix','database.connections.sqlite.foreign_key_constraints','database.connections.mysql.driver','database.connections.mysql.url',
-'database.connections.mysql.host','database.connections.mysql.port','database.connections.mysql.database','database.connections.mysql.username','database.connections.mysql.password',
-'database.connections.mysql.unix_socket','database.connections.mysql.charset','database.connections.mysql.collation','database.connections.mysql.prefix','database.connections.mysql.prefix_indexes',
-'database.connections.mysql.strict','database.connections.mysql.engine','database.connections.mysql.options','database.connections.mariadb.driver','database.connections.mariadb.url',
-'database.connections.mariadb.host','database.connections.mariadb.port','database.connections.mariadb.database','database.connections.mariadb.username','database.connections.mariadb.password',
-'database.connections.mariadb.unix_socket','database.connections.mariadb.charset','database.connections.mariadb.collation','database.connections.mariadb.prefix','database.connections.mariadb.prefix_indexes',
-'database.connections.mariadb.strict','database.connections.mariadb.engine','database.connections.mariadb.options','database.connections.pgsql.driver','database.connections.pgsql.url',
-'database.connections.pgsql.host','database.connections.pgsql.port','database.connections.pgsql.database','database.connections.pgsql.username','database.connections.pgsql.password',
-'database.connections.pgsql.charset','database.connections.pgsql.prefix','database.connections.pgsql.prefix_indexes','database.connections.pgsql.search_path','database.connections.pgsql.sslmode',
-'database.connections.sqlsrv.driver','database.connections.sqlsrv.url','database.connections.sqlsrv.host','database.connections.sqlsrv.port','database.connections.sqlsrv.database',
-'database.connections.sqlsrv.username','database.connections.sqlsrv.password','database.connections.sqlsrv.charset','database.connections.sqlsrv.prefix','database.connections.sqlsrv.prefix_indexes',
-'database.migrations.table','database.migrations.update_date_on_publish','database.redis.client','database.redis.options.cluster','database.redis.options.prefix',
-'database.redis.default.url','database.redis.default.host','database.redis.default.username','database.redis.default.password','database.redis.default.port',
-'database.redis.default.database','database.redis.cache.url','database.redis.cache.host','database.redis.cache.username','database.redis.cache.password',
-'database.redis.cache.port','database.redis.cache.database','filesystems.default','filesystems.disks.local.driver','filesystems.disks.local.root',
-'filesystems.disks.local.throw','filesystems.disks.public.driver','filesystems.disks.public.root','filesystems.disks.public.url','filesystems.disks.public.visibility',
-'filesystems.disks.public.throw','filesystems.disks.s3.driver','filesystems.disks.s3.key','filesystems.disks.s3.secret','filesystems.disks.s3.region',
-'filesystems.disks.s3.bucket','filesystems.disks.s3.url','filesystems.disks.s3.endpoint','filesystems.disks.s3.use_path_style_endpoint','filesystems.disks.s3.throw',
-'filesystems.links./home/softpar/SoftP/repos/laravel_skeleton/public/storage','logging.default','logging.deprecations.channel','logging.deprecations.trace','logging.channels.stack.driver',
-'logging.channels.stack.channels','logging.channels.stack.ignore_exceptions','logging.channels.single.driver','logging.channels.single.path','logging.channels.single.level',
-'logging.channels.single.replace_placeholders','logging.channels.daily.driver','logging.channels.daily.path','logging.channels.daily.level','logging.channels.daily.days',
-'logging.channels.daily.replace_placeholders','logging.channels.slack.driver','logging.channels.slack.url','logging.channels.slack.username','logging.channels.slack.emoji',
-'logging.channels.slack.level','logging.channels.slack.replace_placeholders','logging.channels.papertrail.driver','logging.channels.papertrail.level','logging.channels.papertrail.handler',
-'logging.channels.papertrail.handler_with.host','logging.channels.papertrail.handler_with.port','logging.channels.papertrail.handler_with.connectionString','logging.channels.papertrail.processors','logging.channels.stderr.driver',
-'logging.channels.stderr.level','logging.channels.stderr.handler','logging.channels.stderr.formatter','logging.channels.stderr.with.stream','logging.channels.stderr.processors',
-'logging.channels.syslog.driver','logging.channels.syslog.level','logging.channels.syslog.facility','logging.channels.syslog.replace_placeholders','logging.channels.errorlog.driver',
-'logging.channels.errorlog.level','logging.channels.errorlog.replace_placeholders','logging.channels.null.driver','logging.channels.null.handler','logging.channels.emergency.path',
-'logging.channels.expiredTokens.driver','logging.channels.expiredTokens.path','logging.channels.expiredTokens.level','logging.channels.expiredTokens.days','mail.default',
-'mail.mailers.smtp.transport','mail.mailers.smtp.url','mail.mailers.smtp.host','mail.mailers.smtp.port','mail.mailers.smtp.encryption',
-'mail.mailers.smtp.username','mail.mailers.smtp.password','mail.mailers.smtp.timeout','mail.mailers.smtp.local_domain','mail.mailers.ses.transport',
-'mail.mailers.postmark.transport','mail.mailers.resend.transport','mail.mailers.sendmail.transport','mail.mailers.sendmail.path','mail.mailers.log.transport',
-'mail.mailers.log.channel','mail.mailers.array.transport','mail.mailers.failover.transport','mail.mailers.failover.mailers','mail.mailers.roundrobin.transport',
-'mail.mailers.roundrobin.mailers','mail.from.address','mail.from.name','mail.markdown.theme','mail.markdown.paths',
-'queue.default','queue.connections.sync.driver','queue.connections.database.driver','queue.connections.database.connection','queue.connections.database.table',
-'queue.connections.database.queue','queue.connections.database.retry_after','queue.connections.database.after_commit','queue.connections.beanstalkd.driver','queue.connections.beanstalkd.host',
-'queue.connections.beanstalkd.queue','queue.connections.beanstalkd.retry_after','queue.connections.beanstalkd.block_for','queue.connections.beanstalkd.after_commit','queue.connections.sqs.driver',
-'queue.connections.sqs.key','queue.connections.sqs.secret','queue.connections.sqs.prefix','queue.connections.sqs.queue','queue.connections.sqs.suffix',
-'queue.connections.sqs.region','queue.connections.sqs.after_commit','queue.connections.redis.driver','queue.connections.redis.connection','queue.connections.redis.queue',
-'queue.connections.redis.retry_after','queue.connections.redis.block_for','queue.connections.redis.after_commit','queue.batching.database','queue.batching.table',
-'queue.failed.driver','queue.failed.database','queue.failed.table','sanctum.stateful','sanctum.guard',
-'sanctum.expiration','sanctum.token_prefix','sanctum.middleware.authenticate_session','sanctum.middleware.encrypt_cookies','sanctum.middleware.validate_csrf_token',
-'sanctum.rt_expiration','services.postmark.token','services.resend.key','services.ses.key','services.ses.secret',
-'services.ses.region','services.slack.notifications.bot_user_oauth_token','services.slack.notifications.channel','session.driver','session.lifetime',
-'session.expire_on_close','session.encrypt','session.files','session.connection','session.table',
-'session.store','session.lottery','session.cookie','session.path','session.domain',
-'session.secure','session.http_only','session.same_site','session.partitioned','view.paths',
-'view.compiled','concurrency.default','hashing.driver','hashing.bcrypt.rounds','hashing.bcrypt.verify',
-'hashing.bcrypt.limit','hashing.argon.memory','hashing.argon.threads','hashing.argon.time','hashing.argon.verify',
-'hashing.rehash_on_login','ide-helper.filename','ide-helper.models_filename','ide-helper.meta_filename','ide-helper.include_fluent',
-'ide-helper.include_factory_builders','ide-helper.write_model_magic_where','ide-helper.write_model_external_builder_methods','ide-helper.write_model_relation_count_properties','ide-helper.write_model_relation_exists_properties',
-'ide-helper.write_eloquent_model_mixins','ide-helper.include_helpers','ide-helper.helper_files','ide-helper.model_locations','ide-helper.ignored_models',
-'ide-helper.model_hooks','ide-helper.extra.Eloquent','ide-helper.extra.Session','ide-helper.magic','ide-helper.interfaces',
-'ide-helper.model_camel_case_properties','ide-helper.type_overrides.integer','ide-helper.type_overrides.boolean','ide-helper.include_class_docblocks','ide-helper.force_fqn',
-'ide-helper.use_generics_annotations','ide-helper.macro_default_return_types.Illuminate\\Http\\Client\\Factory','ide-helper.additional_relation_types','ide-helper.additional_relation_return_types','ide-helper.enforce_nullable_relationships',
-'ide-helper.post_migrate','tinker.commands','tinker.alias','tinker.dont_alias',);
+'app.aliases.Vite','app.franchisor_url','app.franchisee_url','auth.defaults.guard','auth.defaults.passwords',
+'auth.guards.web.driver','auth.guards.web.provider','auth.guards.sanctum.driver','auth.guards.sanctum.provider','auth.providers.users.driver',
+'auth.providers.users.model','auth.passwords.users.provider','auth.passwords.users.table','auth.passwords.users.expire','auth.passwords.users.throttle',
+'auth.password_timeout','broadcasting.default','broadcasting.connections.reverb.driver','broadcasting.connections.reverb.key','broadcasting.connections.reverb.secret',
+'broadcasting.connections.reverb.app_id','broadcasting.connections.reverb.options.host','broadcasting.connections.reverb.options.port','broadcasting.connections.reverb.options.scheme','broadcasting.connections.reverb.options.useTLS',
+'broadcasting.connections.reverb.client_options','broadcasting.connections.pusher.driver','broadcasting.connections.pusher.key','broadcasting.connections.pusher.secret','broadcasting.connections.pusher.app_id',
+'broadcasting.connections.pusher.options.cluster','broadcasting.connections.pusher.options.host','broadcasting.connections.pusher.options.port','broadcasting.connections.pusher.options.scheme','broadcasting.connections.pusher.options.encrypted',
+'broadcasting.connections.pusher.options.useTLS','broadcasting.connections.pusher.client_options','broadcasting.connections.ably.driver','broadcasting.connections.ably.key','broadcasting.connections.log.driver',
+'broadcasting.connections.null.driver','broadcasting.connections.redis.driver','broadcasting.connections.redis.connection','cache.default','cache.stores.array.driver',
+'cache.stores.array.serialize','cache.stores.database.driver','cache.stores.database.table','cache.stores.database.connection','cache.stores.database.lock_connection',
+'cache.stores.file.driver','cache.stores.file.path','cache.stores.file.lock_path','cache.stores.memcached.driver','cache.stores.memcached.persistent_id',
+'cache.stores.memcached.sasl','cache.stores.memcached.options','cache.stores.memcached.servers.0.host','cache.stores.memcached.servers.0.port','cache.stores.memcached.servers.0.weight',
+'cache.stores.redis.driver','cache.stores.redis.connection','cache.stores.redis.lock_connection','cache.stores.dynamodb.driver','cache.stores.dynamodb.key',
+'cache.stores.dynamodb.secret','cache.stores.dynamodb.region','cache.stores.dynamodb.table','cache.stores.dynamodb.endpoint','cache.stores.octane.driver',
+'cache.prefix','cors.paths','cors.allowed_methods','cors.allowed_origins','cors.allowed_origins_patterns',
+'cors.allowed_headers','cors.exposed_headers','cors.max_age','cors.supports_credentials','database.default',
+'database.connections.sqlite.driver','database.connections.sqlite.url','database.connections.sqlite.database','database.connections.sqlite.prefix','database.connections.sqlite.foreign_key_constraints',
+'database.connections.mysql.driver','database.connections.mysql.url','database.connections.mysql.host','database.connections.mysql.port','database.connections.mysql.database',
+'database.connections.mysql.username','database.connections.mysql.password','database.connections.mysql.unix_socket','database.connections.mysql.charset','database.connections.mysql.collation',
+'database.connections.mysql.prefix','database.connections.mysql.prefix_indexes','database.connections.mysql.strict','database.connections.mysql.engine','database.connections.mysql.options',
+'database.connections.mariadb.driver','database.connections.mariadb.url','database.connections.mariadb.host','database.connections.mariadb.port','database.connections.mariadb.database',
+'database.connections.mariadb.username','database.connections.mariadb.password','database.connections.mariadb.unix_socket','database.connections.mariadb.charset','database.connections.mariadb.collation',
+'database.connections.mariadb.prefix','database.connections.mariadb.prefix_indexes','database.connections.mariadb.strict','database.connections.mariadb.engine','database.connections.mariadb.options',
+'database.connections.pgsql.driver','database.connections.pgsql.url','database.connections.pgsql.host','database.connections.pgsql.port','database.connections.pgsql.database',
+'database.connections.pgsql.username','database.connections.pgsql.password','database.connections.pgsql.charset','database.connections.pgsql.prefix','database.connections.pgsql.prefix_indexes',
+'database.connections.pgsql.search_path','database.connections.pgsql.sslmode','database.connections.sqlsrv.driver','database.connections.sqlsrv.url','database.connections.sqlsrv.host',
+'database.connections.sqlsrv.port','database.connections.sqlsrv.database','database.connections.sqlsrv.username','database.connections.sqlsrv.password','database.connections.sqlsrv.charset',
+'database.connections.sqlsrv.prefix','database.connections.sqlsrv.prefix_indexes','database.migrations.table','database.migrations.update_date_on_publish','database.redis.client',
+'database.redis.options.cluster','database.redis.options.prefix','database.redis.default.url','database.redis.default.host','database.redis.default.username',
+'database.redis.default.password','database.redis.default.port','database.redis.default.database','database.redis.cache.url','database.redis.cache.host',
+'database.redis.cache.username','database.redis.cache.password','database.redis.cache.port','database.redis.cache.database','filesystems.default',
+'filesystems.disks.local.driver','filesystems.disks.local.root','filesystems.disks.local.throw','filesystems.disks.public.driver','filesystems.disks.public.root',
+'filesystems.disks.public.url','filesystems.disks.public.visibility','filesystems.disks.public.throw','filesystems.disks.s3.driver','filesystems.disks.s3.key',
+'filesystems.disks.s3.secret','filesystems.disks.s3.region','filesystems.disks.s3.bucket','filesystems.disks.s3.url','filesystems.disks.s3.endpoint',
+'filesystems.disks.s3.use_path_style_endpoint','filesystems.disks.s3.throw','filesystems.links./home/ghalves/workspace/ginastica_cerebro/api/public/storage','logging.default','logging.deprecations.channel',
+'logging.deprecations.trace','logging.channels.stack.driver','logging.channels.stack.channels','logging.channels.stack.ignore_exceptions','logging.channels.single.driver',
+'logging.channels.single.path','logging.channels.single.level','logging.channels.single.replace_placeholders','logging.channels.daily.driver','logging.channels.daily.path',
+'logging.channels.daily.level','logging.channels.daily.days','logging.channels.daily.replace_placeholders','logging.channels.slack.driver','logging.channels.slack.url',
+'logging.channels.slack.username','logging.channels.slack.emoji','logging.channels.slack.level','logging.channels.slack.replace_placeholders','logging.channels.papertrail.driver',
+'logging.channels.papertrail.level','logging.channels.papertrail.handler','logging.channels.papertrail.handler_with.host','logging.channels.papertrail.handler_with.port','logging.channels.papertrail.handler_with.connectionString',
+'logging.channels.papertrail.processors','logging.channels.stderr.driver','logging.channels.stderr.level','logging.channels.stderr.handler','logging.channels.stderr.formatter',
+'logging.channels.stderr.with.stream','logging.channels.stderr.processors','logging.channels.syslog.driver','logging.channels.syslog.level','logging.channels.syslog.facility',
+'logging.channels.syslog.replace_placeholders','logging.channels.errorlog.driver','logging.channels.errorlog.level','logging.channels.errorlog.replace_placeholders','logging.channels.null.driver',
+'logging.channels.null.handler','logging.channels.emergency.path','logging.channels.expiredTokens.driver','logging.channels.expiredTokens.path','logging.channels.expiredTokens.level',
+'logging.channels.expiredTokens.days','mail.default','mail.mailers.smtp.transport','mail.mailers.smtp.url','mail.mailers.smtp.host',
+'mail.mailers.smtp.port','mail.mailers.smtp.encryption','mail.mailers.smtp.username','mail.mailers.smtp.password','mail.mailers.smtp.timeout',
+'mail.mailers.smtp.local_domain','mail.mailers.ses.transport','mail.mailers.postmark.transport','mail.mailers.resend.transport','mail.mailers.sendmail.transport',
+'mail.mailers.sendmail.path','mail.mailers.log.transport','mail.mailers.log.channel','mail.mailers.array.transport','mail.mailers.failover.transport',
+'mail.mailers.failover.mailers','mail.mailers.roundrobin.transport','mail.mailers.roundrobin.mailers','mail.from.address','mail.from.name',
+'mail.markdown.theme','mail.markdown.paths','queue.default','queue.connections.sync.driver','queue.connections.database.driver',
+'queue.connections.database.connection','queue.connections.database.table','queue.connections.database.queue','queue.connections.database.retry_after','queue.connections.database.after_commit',
+'queue.connections.beanstalkd.driver','queue.connections.beanstalkd.host','queue.connections.beanstalkd.queue','queue.connections.beanstalkd.retry_after','queue.connections.beanstalkd.block_for',
+'queue.connections.beanstalkd.after_commit','queue.connections.sqs.driver','queue.connections.sqs.key','queue.connections.sqs.secret','queue.connections.sqs.prefix',
+'queue.connections.sqs.queue','queue.connections.sqs.suffix','queue.connections.sqs.region','queue.connections.sqs.after_commit','queue.connections.redis.driver',
+'queue.connections.redis.connection','queue.connections.redis.queue','queue.connections.redis.retry_after','queue.connections.redis.block_for','queue.connections.redis.after_commit',
+'queue.batching.database','queue.batching.table','queue.failed.driver','queue.failed.database','queue.failed.table',
+'sanctum.stateful','sanctum.guard','sanctum.expiration','sanctum.token_prefix','sanctum.middleware.authenticate_session',
+'sanctum.middleware.encrypt_cookies','sanctum.middleware.validate_csrf_token','sanctum.rt_expiration','services.postmark.token','services.resend.key',
+'services.ses.key','services.ses.secret','services.ses.region','services.slack.notifications.bot_user_oauth_token','services.slack.notifications.channel',
+'session.driver','session.lifetime','session.expire_on_close','session.encrypt','session.files',
+'session.connection','session.table','session.store','session.lottery','session.cookie',
+'session.path','session.domain','session.secure','session.http_only','session.same_site',
+'session.partitioned','view.paths','view.compiled','concurrency.default','hashing.driver',
+'hashing.bcrypt.rounds','hashing.bcrypt.verify','hashing.bcrypt.limit','hashing.argon.memory','hashing.argon.threads',
+'hashing.argon.time','hashing.argon.verify','hashing.rehash_on_login','ide-helper.filename','ide-helper.models_filename',
+'ide-helper.meta_filename','ide-helper.include_fluent','ide-helper.include_factory_builders','ide-helper.write_model_magic_where','ide-helper.write_model_external_builder_methods',
+'ide-helper.write_model_relation_count_properties','ide-helper.write_model_relation_exists_properties','ide-helper.write_eloquent_model_mixins','ide-helper.include_helpers','ide-helper.helper_files',
+'ide-helper.model_locations','ide-helper.ignored_models','ide-helper.model_hooks','ide-helper.extra.Eloquent','ide-helper.extra.Session',
+'ide-helper.magic','ide-helper.interfaces','ide-helper.model_camel_case_properties','ide-helper.type_overrides.integer','ide-helper.type_overrides.boolean',
+'ide-helper.include_class_docblocks','ide-helper.force_fqn','ide-helper.use_generics_annotations','ide-helper.macro_default_return_types.Illuminate\\Http\\Client\\Factory','ide-helper.additional_relation_types',
+'ide-helper.additional_relation_return_types','ide-helper.enforce_nullable_relationships','ide-helper.post_migrate','tinker.commands','tinker.alias',
+'tinker.dont_alias',);
         registerArgumentsSet('middleware', 
 'web','api','auth','auth.basic','auth.session',
 'cache.headers','can','guest','password.confirm','precognitive',
@@ -2134,13 +2141,14 @@
         registerArgumentsSet('routes', 
 'sanctum.csrf-cookie',);
         registerArgumentsSet('views', 
-'laravel-exceptions-renderer::components.card','laravel-exceptions-renderer::components.context','laravel-exceptions-renderer::components.editor','laravel-exceptions-renderer::components.header','laravel-exceptions-renderer::components.icons.chevron-down',
-'laravel-exceptions-renderer::components.icons.chevron-up','laravel-exceptions-renderer::components.icons.computer-desktop','laravel-exceptions-renderer::components.icons.moon','laravel-exceptions-renderer::components.icons.sun','laravel-exceptions-renderer::components.layout',
-'laravel-exceptions-renderer::components.navigation','laravel-exceptions-renderer::components.theme-switcher','laravel-exceptions-renderer::components.trace','laravel-exceptions-renderer::components.trace-and-editor','laravel-exceptions-renderer::show',
-'laravel-exceptions::401','laravel-exceptions::402','laravel-exceptions::403','laravel-exceptions::404','laravel-exceptions::419',
-'laravel-exceptions::429','laravel-exceptions::500','laravel-exceptions::503','laravel-exceptions::layout','laravel-exceptions::minimal',
-'notifications::email','pagination::bootstrap-4','pagination::bootstrap-5','pagination::default','pagination::semantic-ui',
-'pagination::simple-bootstrap-4','pagination::simple-bootstrap-5','pagination::simple-default','pagination::simple-tailwind','pagination::tailwind',);
+'emails.password-reset-code','laravel-exceptions-renderer::components.card','laravel-exceptions-renderer::components.context','laravel-exceptions-renderer::components.editor','laravel-exceptions-renderer::components.header',
+'laravel-exceptions-renderer::components.icons.chevron-down','laravel-exceptions-renderer::components.icons.chevron-up','laravel-exceptions-renderer::components.icons.computer-desktop','laravel-exceptions-renderer::components.icons.moon','laravel-exceptions-renderer::components.icons.sun',
+'laravel-exceptions-renderer::components.layout','laravel-exceptions-renderer::components.navigation','laravel-exceptions-renderer::components.theme-switcher','laravel-exceptions-renderer::components.trace','laravel-exceptions-renderer::components.trace-and-editor',
+'laravel-exceptions-renderer::show','laravel-exceptions::401','laravel-exceptions::402','laravel-exceptions::403','laravel-exceptions::404',
+'laravel-exceptions::419','laravel-exceptions::429','laravel-exceptions::500','laravel-exceptions::503','laravel-exceptions::layout',
+'laravel-exceptions::minimal','notifications::email','pagination::bootstrap-4','pagination::bootstrap-5','pagination::default',
+'pagination::semantic-ui','pagination::simple-bootstrap-4','pagination::simple-bootstrap-5','pagination::simple-default','pagination::simple-tailwind',
+'pagination::tailwind',);
         registerArgumentsSet('translations', 
 'auth.failed','auth.password','auth.throttle','pagination.previous','pagination.next',
 'passwords.reset','passwords.sent','passwords.throttled','passwords.token','passwords.user',
@@ -2171,7 +2179,8 @@
 'validation.size.array','validation.size.file','validation.size.numeric','validation.size.string','validation.starts_with',
 'validation.string','validation.timezone','validation.unique','validation.uploaded','validation.uppercase',
 'validation.url','validation.ulid','validation.uuid','validation.custom.attribute-name.rule-name','auth.logout',
-'auth.logged_in','auth.already_logged_out','auth.unauthorized','auth.session_expired','http.created',
+'auth.logged_in','auth.already_logged_out','auth.unauthorized','auth.session_expired','auth.password_reset_sent',
+'auth.email_not_found','auth.invalid_code','auth.code_verified','auth.password_reset_success','http.created',
 'http.updated','http.deleted','http.success','http.error','http.not_found',
 'http.unauthorized','http.forbidden','http.validation_error','http.internal_server_error','http.bad_request',
 'http.no_content','http.conflict','http.unprocessable_entity','http.too_many_requests','http.service_unavailable',
@@ -2181,16 +2190,16 @@
 'messages.buyer_not_allowed','validation.cannot_delete_related','validation.event_full','validation.payment_cant_be_refunded','validation.refund_value_greater_than_payment_value',);
         registerArgumentsSet('env', 
 'APP_NAME','APP_ENV','APP_KEY','APP_DEBUG','APP_TIMEZONE',
-'APP_URL','APP_LOCALE','APP_FALLBACK_LOCALE','APP_FAKER_LOCALE','APP_MAINTENANCE_DRIVER',
-'APP_MAINTENANCE_STORE','BCRYPT_ROUNDS','LOG_CHANNEL','LOG_STACK','LOG_DEPRECATIONS_CHANNEL',
-'LOG_LEVEL','DB_CONNECTION','DB_HOST','DB_PORT','DB_DATABASE',
-'DB_USERNAME','DB_PASSWORD','SESSION_DRIVER','SESSION_LIFETIME','SESSION_ENCRYPT',
-'SESSION_PATH','SESSION_DOMAIN','BROADCAST_CONNECTION','FILESYSTEM_DISK','QUEUE_CONNECTION',
-'CACHE_STORE','CACHE_PREFIX','MEMCACHED_HOST','REDIS_CLIENT','REDIS_HOST',
-'REDIS_PASSWORD','REDIS_PORT','MAIL_MAILER','MAIL_HOST','MAIL_PORT',
-'MAIL_USERNAME','MAIL_PASSWORD','MAIL_ENCRYPTION','MAIL_FROM_ADDRESS','MAIL_FROM_NAME',
-'FILESYSTEM_DRIVER','AWS_ACCESS_KEY_ID','AWS_SECRET_ACCESS_KEY','AWS_DEFAULT_REGION','AWS_BUCKET',
-'AWS_URL','AWS_USE_PATH_STYLE_ENDPOINT',);
+'APP_URL','FRANCHISOR_URL','FRANCHISEE_URL','APP_LOCALE','APP_FALLBACK_LOCALE',
+'APP_FAKER_LOCALE','APP_MAINTENANCE_DRIVER','APP_MAINTENANCE_STORE','BCRYPT_ROUNDS','LOG_CHANNEL',
+'LOG_STACK','LOG_DEPRECATIONS_CHANNEL','LOG_LEVEL','DB_CONNECTION','DB_HOST',
+'DB_PORT','DB_DATABASE','DB_USERNAME','DB_PASSWORD','SESSION_DRIVER',
+'SESSION_LIFETIME','SESSION_ENCRYPT','SESSION_PATH','SESSION_DOMAIN','BROADCAST_CONNECTION',
+'FILESYSTEM_DISK','QUEUE_CONNECTION','CACHE_STORE','CACHE_PREFIX','MEMCACHED_HOST',
+'REDIS_CLIENT','REDIS_HOST','REDIS_PASSWORD','REDIS_PORT','MAIL_MAILER',
+'MAIL_HOST','MAIL_PORT','MAIL_USERNAME','MAIL_PASSWORD','MAIL_ENCRYPTION',
+'MAIL_FROM_ADDRESS','MAIL_FROM_NAME','FILESYSTEM_DRIVER','AWS_ACCESS_KEY_ID','AWS_SECRET_ACCESS_KEY',
+'AWS_DEFAULT_REGION','AWS_BUCKET','AWS_URL','AWS_USE_PATH_STYLE_ENDPOINT',);
         
                 expectedArguments(\Illuminate\Support\Facades\Gate::has(), 0, argumentsSet('auth'));
     expectedArguments(\Illuminate\Support\Facades\Gate::allows(), 0, argumentsSet('auth'));

+ 0 - 109
_ide_helper.php

@@ -22910,115 +22910,6 @@ public static function dropNestedSet()
             return \Illuminate\Database\Schema\Blueprint::dropNestedSet();
         }
 
-        /**
-         * @see \Pgvector\Laravel\Schema::register()
-         * @param string $column
-         * @param mixed|null $dimensions
-         * @return \Illuminate\Database\Schema\ColumnDefinition
-         * @static
-         */
-        public static function halfvec($column, $dimensions = null)
-        {
-            return \Illuminate\Database\Schema\Blueprint::halfvec($column, $dimensions);
-        }
-
-        /**
-         * @see \Pgvector\Laravel\Schema::register()
-         * @param string $column
-         * @param mixed|null $length
-         * @return \Illuminate\Database\Schema\ColumnDefinition
-         * @static
-         */
-        public static function bit($column, $length = null)
-        {
-            return \Illuminate\Database\Schema\Blueprint::bit($column, $length);
-        }
-
-        /**
-         * @see \Pgvector\Laravel\Schema::register()
-         * @param string $column
-         * @param mixed|null $dimensions
-         * @return \Illuminate\Database\Schema\ColumnDefinition
-         * @static
-         */
-        public static function sparsevec($column, $dimensions = null)
-        {
-            return \Illuminate\Database\Schema\Blueprint::sparsevec($column, $dimensions);
-        }
-
-            }
-    }
-
-namespace Illuminate\Database\Schema\Grammars {
-    /**
-     */
-    class PostgresGrammar extends \Illuminate\Database\Schema\Grammars\Grammar {
-            }
-    /**
-     */
-    class Grammar extends \Illuminate\Database\Grammar {
-            }
-    }
-
-namespace Illuminate\Database {
-    /**
-     */
-    class Grammar {
-        /**
-         * @see \Pgvector\Laravel\Schema::register()
-         * @param \Illuminate\Database\Schema\ColumnDefinition $column
-         * @return string
-         * @static
-         */
-        public static function typeVector($column)
-        {
-            return \Illuminate\Database\Grammar::typeVector($column);
-        }
-
-        /**
-         * @see \Pgvector\Laravel\Schema::register()
-         * @param \Illuminate\Database\Schema\ColumnDefinition $column
-         * @return string
-         * @static
-         */
-        public static function typeHalfvec($column)
-        {
-            return \Illuminate\Database\Grammar::typeHalfvec($column);
-        }
-
-        /**
-         * @see \Pgvector\Laravel\Schema::register()
-         * @param \Illuminate\Database\Schema\ColumnDefinition $column
-         * @return string
-         * @static
-         */
-        public static function typeBit($column)
-        {
-            return \Illuminate\Database\Grammar::typeBit($column);
-        }
-
-        /**
-         * @see \Pgvector\Laravel\Schema::register()
-         * @param \Illuminate\Database\Schema\ColumnDefinition $column
-         * @return string
-         * @static
-         */
-        public static function typeSparsevec($column)
-        {
-            return \Illuminate\Database\Grammar::typeSparsevec($column);
-        }
-
-            }
-    }
-
-namespace Illuminate\Database\Query\Grammars {
-    /**
-     */
-    class PostgresGrammar extends \Illuminate\Database\Query\Grammars\Grammar {
-            }
-    /**
-     */
-    class Grammar extends \Illuminate\Database\Grammar {
             }
     }
 

+ 34 - 0
app/Http/Controllers/UnitContractController.php

@@ -0,0 +1,34 @@
+<?php
+
+namespace App\Http\Controllers;
+
+use App\Services\UnitContractService;
+use App\Http\Requests\UnitContractRequest;
+use App\Http\Resources\UnitContractResource;
+use Illuminate\Http\JsonResponse;
+use Illuminate\Http\Request;
+
+class UnitContractController extends Controller
+{
+    public function __construct(
+        protected UnitContractService $service,
+    ) {}
+
+    public function index(Request $request): JsonResponse
+    {
+        $items = $this->service->getByUnitId($request->integer('unit_id'));
+        return $this->successResponse(payload: UnitContractResource::collection($items));
+    }
+
+    public function store(UnitContractRequest $request): JsonResponse
+    {
+        $item = $this->service->create($request->validated());
+        return $this->successResponse(payload: new UnitContractResource($item), message: __('messages.created'), code: 201);
+    }
+
+    public function destroy(int $id): JsonResponse
+    {
+        $this->service->delete($id);
+        return $this->successResponse(message: __('messages.deleted'), code: 204);
+    }
+}

+ 27 - 0
app/Http/Requests/UnitContractRequest.php

@@ -0,0 +1,27 @@
+<?php
+
+namespace App\Http\Requests;
+
+use Illuminate\Foundation\Http\FormRequest;
+
+class UnitContractRequest extends FormRequest
+{
+    public function rules(): array
+    {
+        return [
+            'unit_id' => 'required|integer|exists:units,id',
+            'file'    => 'required|file|mimes:pdf|max:10240',
+            'name'    => 'nullable|string|max:255',
+        ];
+    }
+
+    /**
+    * Add custom messages when needed
+    * public function messages(): array
+    * {
+    *   return [
+    *        'field.required' => __('message.algo'),
+    *    ];
+    * }
+    */
+}

+ 2 - 0
app/Http/Requests/UnitRequest.php

@@ -28,6 +28,8 @@ public function rules(): array
             'phone_number'      => 'sometimes|required|string|max:20',
             'cell_number'       => 'sometimes|nullable|string|max:20',
             'avatar'                    => 'sometimes|nullable|image|max:2048',
+            'contracts'                 => 'sometimes|nullable|array',
+            'contracts.*'               => 'file|mimes:pdf|max:10240',
             'partners'                  => 'sometimes|nullable|array',
             'partners.*.name'           => 'required|string|max:255',
             'partners.*.cpf'            => 'required|string|max:20',

+ 39 - 0
app/Http/Resources/UnitContractResource.php

@@ -0,0 +1,39 @@
+<?php
+
+namespace App\Http\Resources;
+
+use Carbon\Carbon;
+use Illuminate\Http\Request;
+use Illuminate\Http\Resources\Json\JsonResource;
+use Illuminate\Http\Resources\Json\AnonymousResourceCollection;
+use Illuminate\Support\Facades\Storage;
+use App\Models\UnitContract;
+
+class UnitContractResource extends JsonResource
+{
+    /**
+     * Transform the resource into an array.
+     *
+     * @return array<string, mixed>
+     */
+    public function toArray(Request $request): array
+    {
+        return [
+            'id'         => $this->id,
+            'unit_id'    => $this->unit_id,
+            'name'       => $this->name,
+            'file_url'   => $this->file_url ? Storage::url($this->file_url) : null,
+            'created_at' => Carbon::parse($this->created_at)->format('Y-m-d H:i:s'),
+            'updated_at' => Carbon::parse($this->updated_at)->format('Y-m-d H:i:s'),
+        ];
+    }
+
+    /**
+     * @param \Illuminate\Database\Eloquent\Collection<UnitContract> $resource
+     * @return \Illuminate\Http\Resources\Json\AnonymousResourceCollection<UnitContractResource>
+     */
+    public static function collection($resource): AnonymousResourceCollection
+    {
+        return parent::collection($resource);
+    }
+}

+ 1 - 1
app/Http/Resources/UnitPartnerResource.php

@@ -35,7 +35,7 @@ public function toArray(Request $request): array
             'city_id'          => $this->city_id,
             'state_id'         => $this->state_id,
             'avatar_url'       => $this->avatar_url
-                ? Storage::disk('public')->url($this->avatar_url)
+                ? Storage::url($this->avatar_url)
                 : null,
             'created_at'       => Carbon::parse($this->created_at)->format('Y-m-d H:i:s'),
             'updated_at'       => Carbon::parse($this->updated_at)->format('Y-m-d H:i:s'),

+ 1 - 1
app/Http/Resources/UnitResource.php

@@ -37,7 +37,7 @@ public function toArray(Request $request): array
             'phone_number'       => $this->phone_number,
             'cell_number'        => $this->cell_number,
             'avatar_url'         => $this->avatar_url
-                ? Storage::disk('public')->url($this->avatar_url)
+                ? Storage::url($this->avatar_url)
                 : null,
             'created_at'         => Carbon::parse($this->created_at)->format('Y-m-d H:i:s'),
             'updated_at'         => Carbon::parse($this->updated_at)->format('Y-m-d H:i:s'),

+ 38 - 0
app/Models/UnitContract.php

@@ -0,0 +1,38 @@
+<?php
+
+namespace App\Models;
+
+use Illuminate\Database\Eloquent\Factories\HasFactory;
+use Illuminate\Database\Eloquent\Model;
+use Illuminate\Database\Eloquent\Relations\BelongsTo;
+use Illuminate\Database\Eloquent\SoftDeletes;
+
+/**
+ * @property int $id
+ * @property int $unit_id
+ * @property string $name
+ * @property string $file_url
+ * @property \Carbon\Carbon $created_at
+ * @property \Carbon\Carbon $updated_at
+ * @property \Carbon\Carbon|null $deleted_at
+ * @property-read \App\Models\Unit $unit
+ */
+class UnitContract extends Model
+{
+    use HasFactory, SoftDeletes;
+
+    protected $table = 'unit_contracts';
+
+    protected $guarded = ['id'];
+
+    protected $casts = [
+        'created_at' => 'datetime',
+        'updated_at' => 'datetime',
+        'deleted_at' => 'datetime',
+    ];
+
+    public function unit(): BelongsTo
+    {
+        return $this->belongsTo(Unit::class, 'unit_id');
+    }
+}

+ 43 - 0
app/Services/UnitContractService.php

@@ -0,0 +1,43 @@
+<?php
+
+namespace App\Services;
+
+use App\Models\UnitContract;
+use Illuminate\Database\Eloquent\Collection;
+use Illuminate\Support\Facades\Storage;
+
+class UnitContractService
+{
+    public function getByUnitId(int $unitId): Collection
+    {
+        return UnitContract::where('unit_id', $unitId)
+            ->orderBy('created_at', 'desc')
+            ->get();
+    }
+
+    public function create(array $data): UnitContract
+    {
+        $file    = $data['file'];
+        $name    = !empty($data['name']) ? $data['name'] : $file->getClientOriginalName();
+        $fileUrl = $file->store('unit-contracts');
+
+        return UnitContract::create([
+            'unit_id'  => $data['unit_id'],
+            'name'     => $name,
+            'file_url' => $fileUrl,
+        ]);
+    }
+
+    public function delete(int $id): bool
+    {
+        $model = UnitContract::find($id);
+
+        if (!$model) {
+            return false;
+        }
+
+        Storage::delete($model->file_url);
+
+        return $model->delete();
+    }
+}

+ 4 - 4
app/Services/UnitPartnerService.php

@@ -57,7 +57,7 @@ public function delete(int $id): bool
         }
 
         if ($model->avatar_url) {
-            Storage::disk('public')->delete($model->avatar_url);
+            Storage::delete($model->avatar_url);
         }
 
         return $model->delete();
@@ -71,12 +71,12 @@ private function handleAvatar(array $data, ?string $oldAvatarPath = null): array
 
         if ($data['avatar'] instanceof UploadedFile) {
             if ($oldAvatarPath) {
-                Storage::disk('public')->delete($oldAvatarPath);
+                Storage::delete($oldAvatarPath);
             }
-            $data['avatar_url'] = $data['avatar']->store('unit-partners/avatars', 'public');
+            $data['avatar_url'] = $data['avatar']->store('unit-partners/avatars');
         } elseif (is_null($data['avatar'])) {
             if ($oldAvatarPath) {
-                Storage::disk('public')->delete($oldAvatarPath);
+                Storage::delete($oldAvatarPath);
             }
             $data['avatar_url'] = null;
         }

+ 16 - 6
app/Services/UnitService.php

@@ -3,6 +3,7 @@
 namespace App\Services;
 
 use App\Models\Unit;
+use App\Models\UnitContract;
 use App\Models\UnitPartner;
 use Illuminate\Database\Eloquent\Collection;
 use Illuminate\Http\UploadedFile;
@@ -24,8 +25,9 @@ public function findById(int $id): ?Unit
 
     public function create(array $data): Unit
     {
-        $partners = $data['partners'] ?? [];
-        unset($data['partners']);
+        $partners  = $data['partners'] ?? [];
+        $contracts = $data['contracts'] ?? [];
+        unset($data['partners'], $data['contracts']);
 
         $data = $this->handleAvatar($data);
         $unit = Unit::create($data);
@@ -34,6 +36,14 @@ public function create(array $data): Unit
             UnitPartner::create(array_merge($partnerData, ['unit_id' => $unit->id]));
         }
 
+        foreach ($contracts as $file) {
+            UnitContract::create([
+                'unit_id'  => $unit->id,
+                'name'     => $file->getClientOriginalName(),
+                'file_url' => $file->store('unit-contracts'),
+            ]);
+        }
+
         return $unit;
     }
 
@@ -59,7 +69,7 @@ public function delete(int $id): bool
         }
 
         if ($model->avatar_url) {
-            Storage::disk('public')->delete($model->avatar_url);
+            Storage::delete($model->avatar_url);
         }
 
         return $model->delete();
@@ -73,12 +83,12 @@ private function handleAvatar(array $data, ?string $oldAvatarPath = null): array
 
         if ($data['avatar'] instanceof UploadedFile) {
             if ($oldAvatarPath) {
-                Storage::disk('public')->delete($oldAvatarPath);
+                Storage::delete($oldAvatarPath);
             }
-            $data['avatar_url'] = $data['avatar']->store('units/avatars', 'public');
+            $data['avatar_url'] = $data['avatar']->store('units/avatars');
         } elseif (is_null($data['avatar'])) {
             if ($oldAvatarPath) {
-                Storage::disk('public')->delete($oldAvatarPath);
+                Storage::delete($oldAvatarPath);
             }
             $data['avatar_url'] = null;
         }

+ 2 - 1
composer.json

@@ -12,7 +12,8 @@
         "kalnoy/nestedset": "^6.0",
         "laravel/framework": "^12.0",
         "laravel/sanctum": "^4.0",
-        "laravel/tinker": "^2.9"
+        "laravel/tinker": "^2.9",
+        "league/flysystem-aws-s3-v3": "^3.0"
     },
     "require-dev": {
         "barryvdh/laravel-ide-helper": "^3.6",

+ 346 - 4
composer.lock

@@ -4,8 +4,159 @@
         "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
         "This file is @generated automatically"
     ],
-    "content-hash": "40404f977a56fc05d7f7679557905a6b",
+    "content-hash": "b7b8a0825559a45ee8015f0048c9eeea",
     "packages": [
+        {
+            "name": "aws/aws-crt-php",
+            "version": "v1.2.7",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/awslabs/aws-crt-php.git",
+                "reference": "d71d9906c7bb63a28295447ba12e74723bd3730e"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/awslabs/aws-crt-php/zipball/d71d9906c7bb63a28295447ba12e74723bd3730e",
+                "reference": "d71d9906c7bb63a28295447ba12e74723bd3730e",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.5"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^4.8.35||^5.6.3||^9.5",
+                "yoast/phpunit-polyfills": "^1.0"
+            },
+            "suggest": {
+                "ext-awscrt": "Make sure you install awscrt native extension to use any of the functionality."
+            },
+            "type": "library",
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "Apache-2.0"
+            ],
+            "authors": [
+                {
+                    "name": "AWS SDK Common Runtime Team",
+                    "email": "aws-sdk-common-runtime@amazon.com"
+                }
+            ],
+            "description": "AWS Common Runtime for PHP",
+            "homepage": "https://github.com/awslabs/aws-crt-php",
+            "keywords": [
+                "amazon",
+                "aws",
+                "crt",
+                "sdk"
+            ],
+            "support": {
+                "issues": "https://github.com/awslabs/aws-crt-php/issues",
+                "source": "https://github.com/awslabs/aws-crt-php/tree/v1.2.7"
+            },
+            "time": "2024-10-18T22:15:13+00:00"
+        },
+        {
+            "name": "aws/aws-sdk-php",
+            "version": "3.379.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/aws/aws-sdk-php.git",
+                "reference": "a50c3cc2c59f5ebeb56cbe170e6f144034b252b6"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/a50c3cc2c59f5ebeb56cbe170e6f144034b252b6",
+                "reference": "a50c3cc2c59f5ebeb56cbe170e6f144034b252b6",
+                "shasum": ""
+            },
+            "require": {
+                "aws/aws-crt-php": "^1.2.3",
+                "ext-json": "*",
+                "ext-pcre": "*",
+                "ext-simplexml": "*",
+                "guzzlehttp/guzzle": "^7.4.5",
+                "guzzlehttp/promises": "^2.0",
+                "guzzlehttp/psr7": "^2.4.5",
+                "mtdowling/jmespath.php": "^2.8.0",
+                "php": ">=8.1",
+                "psr/http-message": "^1.0 || ^2.0",
+                "symfony/filesystem": "^v5.4.45 || ^v6.4.3 || ^v7.1.0 || ^v8.0.0"
+            },
+            "require-dev": {
+                "andrewsville/php-token-reflection": "^1.4",
+                "aws/aws-php-sns-message-validator": "~1.0",
+                "behat/behat": "~3.0",
+                "composer/composer": "^2.7.8",
+                "dms/phpunit-arraysubset-asserts": "^v0.5.0",
+                "doctrine/cache": "~1.4",
+                "ext-dom": "*",
+                "ext-openssl": "*",
+                "ext-sockets": "*",
+                "phpunit/phpunit": "^10.0",
+                "psr/cache": "^2.0 || ^3.0",
+                "psr/simple-cache": "^2.0 || ^3.0",
+                "sebastian/comparator": "^1.2.3 || ^4.0 || ^5.0",
+                "yoast/phpunit-polyfills": "^2.0"
+            },
+            "suggest": {
+                "aws/aws-php-sns-message-validator": "To validate incoming SNS notifications",
+                "doctrine/cache": "To use the DoctrineCacheAdapter",
+                "ext-curl": "To send requests using cURL",
+                "ext-openssl": "Allows working with CloudFront private distributions and verifying received SNS messages",
+                "ext-pcntl": "To use client-side monitoring",
+                "ext-sockets": "To use client-side monitoring"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "3.0-dev"
+                }
+            },
+            "autoload": {
+                "files": [
+                    "src/functions.php"
+                ],
+                "psr-4": {
+                    "Aws\\": "src/"
+                },
+                "exclude-from-classmap": [
+                    "src/data/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "Apache-2.0"
+            ],
+            "authors": [
+                {
+                    "name": "Amazon Web Services",
+                    "homepage": "https://aws.amazon.com"
+                }
+            ],
+            "description": "AWS SDK for PHP - Use Amazon Web Services in your PHP project",
+            "homepage": "https://aws.amazon.com/sdk-for-php",
+            "keywords": [
+                "amazon",
+                "aws",
+                "cloud",
+                "dynamodb",
+                "ec2",
+                "glacier",
+                "s3",
+                "sdk"
+            ],
+            "support": {
+                "forum": "https://github.com/aws/aws-sdk-php/discussions",
+                "issues": "https://github.com/aws/aws-sdk-php/issues",
+                "source": "https://github.com/aws/aws-sdk-php/tree/3.379.0"
+            },
+            "time": "2026-04-13T18:11:10+00:00"
+        },
         {
             "name": "brick/math",
             "version": "0.13.1",
@@ -1854,6 +2005,61 @@
             },
             "time": "2025-06-25T13:29:59+00:00"
         },
+        {
+            "name": "league/flysystem-aws-s3-v3",
+            "version": "3.32.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/thephpleague/flysystem-aws-s3-v3.git",
+                "reference": "a1979df7c9784d334ea6df356aed3d18ac6673d0"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/thephpleague/flysystem-aws-s3-v3/zipball/a1979df7c9784d334ea6df356aed3d18ac6673d0",
+                "reference": "a1979df7c9784d334ea6df356aed3d18ac6673d0",
+                "shasum": ""
+            },
+            "require": {
+                "aws/aws-sdk-php": "^3.295.10",
+                "league/flysystem": "^3.10.0",
+                "league/mime-type-detection": "^1.0.0",
+                "php": "^8.0.2"
+            },
+            "conflict": {
+                "guzzlehttp/guzzle": "<7.0",
+                "guzzlehttp/ringphp": "<1.1.1"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "League\\Flysystem\\AwsS3V3\\": ""
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Frank de Jonge",
+                    "email": "info@frankdejonge.nl"
+                }
+            ],
+            "description": "AWS S3 filesystem adapter for Flysystem.",
+            "keywords": [
+                "Flysystem",
+                "aws",
+                "file",
+                "files",
+                "filesystem",
+                "s3",
+                "storage"
+            ],
+            "support": {
+                "source": "https://github.com/thephpleague/flysystem-aws-s3-v3/tree/3.32.0"
+            },
+            "time": "2026-02-25T16:46:44+00:00"
+        },
         {
             "name": "league/flysystem-local",
             "version": "3.30.0",
@@ -2236,6 +2442,72 @@
             ],
             "time": "2025-03-24T10:02:05+00:00"
         },
+        {
+            "name": "mtdowling/jmespath.php",
+            "version": "2.8.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/jmespath/jmespath.php.git",
+                "reference": "a2a865e05d5f420b50cc2f85bb78d565db12a6bc"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/jmespath/jmespath.php/zipball/a2a865e05d5f420b50cc2f85bb78d565db12a6bc",
+                "reference": "a2a865e05d5f420b50cc2f85bb78d565db12a6bc",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^7.2.5 || ^8.0",
+                "symfony/polyfill-mbstring": "^1.17"
+            },
+            "require-dev": {
+                "composer/xdebug-handler": "^3.0.3",
+                "phpunit/phpunit": "^8.5.33"
+            },
+            "bin": [
+                "bin/jp.php"
+            ],
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.8-dev"
+                }
+            },
+            "autoload": {
+                "files": [
+                    "src/JmesPath.php"
+                ],
+                "psr-4": {
+                    "JmesPath\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Graham Campbell",
+                    "email": "hello@gjcampbell.co.uk",
+                    "homepage": "https://github.com/GrahamCampbell"
+                },
+                {
+                    "name": "Michael Dowling",
+                    "email": "mtdowling@gmail.com",
+                    "homepage": "https://github.com/mtdowling"
+                }
+            ],
+            "description": "Declaratively specify how to extract elements from a JSON document",
+            "keywords": [
+                "json",
+                "jsonpath"
+            ],
+            "support": {
+                "issues": "https://github.com/jmespath/jmespath.php/issues",
+                "source": "https://github.com/jmespath/jmespath.php/tree/2.8.0"
+            },
+            "time": "2024-09-04T18:46:31+00:00"
+        },
         {
             "name": "nesbot/carbon",
             "version": "3.10.1",
@@ -3931,6 +4203,76 @@
             ],
             "time": "2024-09-25T14:21:43+00:00"
         },
+        {
+            "name": "symfony/filesystem",
+            "version": "v7.4.8",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/filesystem.git",
+                "reference": "58b9790d12f9670b7f53a1c1738febd3108970a5"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/filesystem/zipball/58b9790d12f9670b7f53a1c1738febd3108970a5",
+                "reference": "58b9790d12f9670b7f53a1c1738febd3108970a5",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=8.2",
+                "symfony/polyfill-ctype": "~1.8",
+                "symfony/polyfill-mbstring": "~1.8"
+            },
+            "require-dev": {
+                "symfony/process": "^6.4|^7.0|^8.0"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Component\\Filesystem\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Provides basic utilities for the filesystem",
+            "homepage": "https://symfony.com",
+            "support": {
+                "source": "https://github.com/symfony/filesystem/tree/v7.4.8"
+            },
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://github.com/nicolas-grekas",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2026-03-24T13:12:05+00:00"
+        },
         {
             "name": "symfony/finder",
             "version": "v7.3.0",
@@ -8436,12 +8778,12 @@
     ],
     "aliases": [],
     "minimum-stability": "stable",
-    "stability-flags": [],
+    "stability-flags": {},
     "prefer-stable": true,
     "prefer-lowest": false,
     "platform": {
         "php": "^8.3"
     },
-    "platform-dev": [],
-    "plugin-api-version": "2.3.0"
+    "platform-dev": {},
+    "plugin-api-version": "2.9.0"
 }

+ 12 - 0
routes/authRoutes/unit_contract.php

@@ -0,0 +1,12 @@
+<?php
+
+use Illuminate\Support\Facades\Route;
+use App\Http\Controllers\UnitContractController;
+
+Route::controller(UnitContractController::class)->prefix('unit-contract')->group(function () {
+    Route::get('/', 'index')->middleware('permission:unit,view');
+
+    Route::post('/', 'store')->middleware('permission:unit,add');
+
+    Route::delete('/{id}', 'destroy')->middleware('permission:unit,delete');
+});