Skip to content

Commit

Permalink
ability to create extension draft records WIP
Browse files Browse the repository at this point in the history
  • Loading branch information
roncodes committed Mar 21, 2024
1 parent 6497d26 commit 63e3be9
Show file tree
Hide file tree
Showing 58 changed files with 824 additions and 20 deletions.
2 changes: 1 addition & 1 deletion .php-cs-fixer.cache
Original file line number Diff line number Diff line change
@@ -1 +1 @@
{"php":"8.3.2","version":"3.49.0","indent":" ","lineEnding":"\n","rules":{"align_multiline_comment":true,"array_syntax":{"syntax":"short"},"backtick_to_shell_exec":true,"binary_operator_spaces":{"operators":{"=>":"align","=":"align"}},"blank_line_before_statement":{"statements":["return"]},"braces_position":{"allow_single_line_anonymous_functions":true,"allow_single_line_empty_anonymous_classes":true},"class_attributes_separation":{"elements":{"method":"one"}},"class_definition":{"single_line":true},"class_reference_name_casing":true,"clean_namespace":true,"concat_space":{"spacing":"one"},"declare_parentheses":true,"echo_tag_syntax":true,"empty_loop_body":{"style":"braces"},"empty_loop_condition":true,"fully_qualified_strict_types":true,"function_declaration":true,"general_phpdoc_tag_rename":{"replacements":{"inheritDocs":"inheritDoc"}},"global_namespace_import":{"import_classes":false,"import_constants":false,"import_functions":false},"include":true,"increment_style":{"style":"post"},"integer_literal_case":true,"lambda_not_used_import":true,"linebreak_after_opening_tag":true,"magic_constant_casing":true,"magic_method_casing":true,"method_argument_space":{"on_multiline":"ignore"},"native_function_casing":true,"native_type_declaration_casing":true,"no_alias_language_construct_call":true,"no_alternative_syntax":true,"no_binary_string":true,"no_blank_lines_after_phpdoc":true,"no_empty_comment":true,"no_empty_phpdoc":true,"no_empty_statement":true,"no_extra_blank_lines":{"tokens":["attribute","case","continue","curly_brace_block","default","extra","parenthesis_brace_block","square_brace_block","switch","throw","use"]},"no_leading_namespace_whitespace":true,"no_mixed_echo_print":true,"no_multiline_whitespace_around_double_arrow":true,"no_null_property_initialization":true,"no_short_bool_cast":true,"no_singleline_whitespace_before_semicolons":true,"no_spaces_around_offset":true,"no_superfluous_phpdoc_tags":{"remove_inheritdoc":true},"no_trailing_comma_in_singleline":true,"no_unneeded_braces":{"namespaces":true},"no_unneeded_control_parentheses":{"statements":["break","clone","continue","echo_print","others","return","switch_case","yield","yield_from"]},"no_unneeded_import_alias":true,"no_unset_cast":true,"no_unused_imports":true,"no_useless_concat_operator":true,"no_useless_nullsafe_operator":true,"no_whitespace_before_comma_in_array":true,"normalize_index_brace":true,"nullable_type_declaration_for_default_null_value":true,"object_operator_without_whitespace":true,"operator_linebreak":{"only_booleans":true},"ordered_imports":{"imports_order":["class","function","const"],"sort_algorithm":"alpha"},"ordered_types":{"null_adjustment":"always_last","sort_algorithm":"none"},"php_unit_fqcn_annotation":true,"php_unit_method_casing":true,"phpdoc_align":true,"phpdoc_annotation_without_dot":true,"phpdoc_indent":true,"phpdoc_inline_tag_normalizer":true,"phpdoc_no_access":true,"phpdoc_no_alias_tag":true,"phpdoc_no_package":true,"phpdoc_no_useless_inheritdoc":true,"phpdoc_order":{"order":["param","return","throws"]},"phpdoc_return_self_reference":true,"phpdoc_scalar":true,"phpdoc_separation":{"groups":[["Annotation","NamedArgumentConstructor","Target"],["author","copyright","license"],["category","package","subpackage"],["property","property-read","property-write"],["deprecated","link","see","since"]]},"phpdoc_single_line_var_spacing":true,"phpdoc_summary":true,"phpdoc_tag_type":{"tags":{"inheritDoc":"inline"}},"phpdoc_to_comment":true,"phpdoc_trim":true,"phpdoc_trim_consecutive_blank_line_separation":true,"phpdoc_types":true,"phpdoc_types_order":{"null_adjustment":"always_last","sort_algorithm":"none"},"phpdoc_var_without_name":true,"semicolon_after_instruction":true,"simple_to_complex_string_variable":true,"single_class_element_per_statement":true,"single_import_per_statement":true,"single_line_comment_spacing":true,"single_line_comment_style":{"comment_types":["hash"]},"single_line_throw":true,"single_quote":true,"single_space_around_construct":true,"space_after_semicolon":{"remove_in_empty_for_expressions":true},"standardize_increment":true,"standardize_not_equals":true,"statement_indentation":{"stick_comment_to_next_continuous_control_statement":true},"switch_continue_to_break":true,"trailing_comma_in_multiline":true,"trim_array_spaces":true,"type_declaration_spaces":true,"types_spaces":true,"unary_operator_spaces":true,"whitespace_after_comma_in_array":true,"cast_spaces":true,"blank_line_after_opening_tag":true,"blank_line_between_import_groups":true,"blank_lines_before_namespace":true,"compact_nullable_type_declaration":true,"declare_equal_normalize":true,"lowercase_cast":true,"lowercase_static_reference":true,"new_with_parentheses":true,"no_blank_lines_after_class_opening":true,"no_leading_import_slash":true,"no_whitespace_in_blank_line":true,"ordered_class_elements":{"order":["use_trait"]},"return_type_declaration":true,"short_scalar_cast":true,"single_trait_insert_per_statement":true,"ternary_operator_spaces":true,"visibility_required":true,"blank_line_after_namespace":true,"constant_case":true,"control_structure_braces":true,"control_structure_continuation_position":true,"elseif":true,"indentation_type":true,"line_ending":true,"lowercase_keywords":true,"no_break_comment":true,"no_closing_tag":true,"no_multiple_statements_per_line":true,"no_space_around_double_colon":true,"no_spaces_after_function_name":true,"no_trailing_whitespace":true,"no_trailing_whitespace_in_comment":true,"single_blank_line_at_eof":true,"single_line_after_imports":true,"spaces_inside_parentheses":true,"switch_case_semicolon_to_colon":true,"switch_case_space":true,"encoding":true,"full_opening_tag":true},"hashes":{"server\/tests\/Feature.php":"9c85d3fc3571920ba5e59e6d460c5220","server\/src\/Providers\/RegistryBridgeServiceProvider.php":"58096e732d9cbf3b78f9fad4e9d2ddc4","server\/src\/Models\/RegistryUser.php":"c210bf9221b71148b95b130a1acdd1c4","server\/src\/Http\/Controllers\/Internal\/v1\/RegistryAuthController.php":"ff7e415c21ea0e16300512b58044e077","server\/src\/Http\/Controllers\/Internal\/v1\/RegistryController.php":"3eb08bbe917a48fa3e44ad436cb7692e","server\/src\/routes.php":"42d0551e087f359e2e1a13fa18d80b64",".php-cs-fixer.php":"97d0e7d944ae71fb5a3344df8ae2cd44","server\/src\/Requests\/AddRegistryUserRequest.php":"4c6dabd5b92f00552a557bb98c2c4101","server\/src\/Http\/Requests\/AddRegistryUserRequest.php":"fcf4a10fffa42e90130939577b79b297","server\/src\/Http\/Resources\/RegistryUser.php":"e3b971606eac1c32327f8496f1fb7baa","server\/src\/Http\/Requests\/AuthenticateRegistryUserRequest.php":"a1aaefc85f959cad0873e866c526c94f"}}
{"php":"8.3.2","version":"3.49.0","indent":" ","lineEnding":"\n","rules":{"align_multiline_comment":true,"array_syntax":{"syntax":"short"},"backtick_to_shell_exec":true,"binary_operator_spaces":{"operators":{"=>":"align","=":"align"}},"blank_line_before_statement":{"statements":["return"]},"braces_position":{"allow_single_line_anonymous_functions":true,"allow_single_line_empty_anonymous_classes":true},"class_attributes_separation":{"elements":{"method":"one"}},"class_definition":{"single_line":true},"class_reference_name_casing":true,"clean_namespace":true,"concat_space":{"spacing":"one"},"declare_parentheses":true,"echo_tag_syntax":true,"empty_loop_body":{"style":"braces"},"empty_loop_condition":true,"fully_qualified_strict_types":true,"function_declaration":true,"general_phpdoc_tag_rename":{"replacements":{"inheritDocs":"inheritDoc"}},"global_namespace_import":{"import_classes":false,"import_constants":false,"import_functions":false},"include":true,"increment_style":{"style":"post"},"integer_literal_case":true,"lambda_not_used_import":true,"linebreak_after_opening_tag":true,"magic_constant_casing":true,"magic_method_casing":true,"method_argument_space":{"on_multiline":"ignore"},"native_function_casing":true,"native_type_declaration_casing":true,"no_alias_language_construct_call":true,"no_alternative_syntax":true,"no_binary_string":true,"no_blank_lines_after_phpdoc":true,"no_empty_comment":true,"no_empty_phpdoc":true,"no_empty_statement":true,"no_extra_blank_lines":{"tokens":["attribute","case","continue","curly_brace_block","default","extra","parenthesis_brace_block","square_brace_block","switch","throw","use"]},"no_leading_namespace_whitespace":true,"no_mixed_echo_print":true,"no_multiline_whitespace_around_double_arrow":true,"no_null_property_initialization":true,"no_short_bool_cast":true,"no_singleline_whitespace_before_semicolons":true,"no_spaces_around_offset":true,"no_superfluous_phpdoc_tags":{"remove_inheritdoc":true},"no_trailing_comma_in_singleline":true,"no_unneeded_braces":{"namespaces":true},"no_unneeded_control_parentheses":{"statements":["break","clone","continue","echo_print","others","return","switch_case","yield","yield_from"]},"no_unneeded_import_alias":true,"no_unset_cast":true,"no_unused_imports":true,"no_useless_concat_operator":true,"no_useless_nullsafe_operator":true,"no_whitespace_before_comma_in_array":true,"normalize_index_brace":true,"nullable_type_declaration_for_default_null_value":true,"object_operator_without_whitespace":true,"operator_linebreak":{"only_booleans":true},"ordered_imports":{"imports_order":["class","function","const"],"sort_algorithm":"alpha"},"ordered_types":{"null_adjustment":"always_last","sort_algorithm":"none"},"php_unit_fqcn_annotation":true,"php_unit_method_casing":true,"phpdoc_align":true,"phpdoc_annotation_without_dot":true,"phpdoc_indent":true,"phpdoc_inline_tag_normalizer":true,"phpdoc_no_access":true,"phpdoc_no_alias_tag":true,"phpdoc_no_package":true,"phpdoc_no_useless_inheritdoc":true,"phpdoc_order":{"order":["param","return","throws"]},"phpdoc_return_self_reference":true,"phpdoc_scalar":true,"phpdoc_separation":{"groups":[["Annotation","NamedArgumentConstructor","Target"],["author","copyright","license"],["category","package","subpackage"],["property","property-read","property-write"],["deprecated","link","see","since"]]},"phpdoc_single_line_var_spacing":true,"phpdoc_summary":true,"phpdoc_tag_type":{"tags":{"inheritDoc":"inline"}},"phpdoc_to_comment":true,"phpdoc_trim":true,"phpdoc_trim_consecutive_blank_line_separation":true,"phpdoc_types":true,"phpdoc_types_order":{"null_adjustment":"always_last","sort_algorithm":"none"},"phpdoc_var_without_name":true,"semicolon_after_instruction":true,"simple_to_complex_string_variable":true,"single_class_element_per_statement":true,"single_import_per_statement":true,"single_line_comment_spacing":true,"single_line_comment_style":{"comment_types":["hash"]},"single_line_throw":true,"single_quote":true,"single_space_around_construct":true,"space_after_semicolon":{"remove_in_empty_for_expressions":true},"standardize_increment":true,"standardize_not_equals":true,"statement_indentation":{"stick_comment_to_next_continuous_control_statement":true},"switch_continue_to_break":true,"trailing_comma_in_multiline":true,"trim_array_spaces":true,"type_declaration_spaces":true,"types_spaces":true,"unary_operator_spaces":true,"whitespace_after_comma_in_array":true,"cast_spaces":true,"blank_line_after_opening_tag":true,"blank_line_between_import_groups":true,"blank_lines_before_namespace":true,"compact_nullable_type_declaration":true,"declare_equal_normalize":true,"lowercase_cast":true,"lowercase_static_reference":true,"new_with_parentheses":true,"no_blank_lines_after_class_opening":true,"no_leading_import_slash":true,"no_whitespace_in_blank_line":true,"ordered_class_elements":{"order":["use_trait"]},"return_type_declaration":true,"short_scalar_cast":true,"single_trait_insert_per_statement":true,"ternary_operator_spaces":true,"visibility_required":true,"blank_line_after_namespace":true,"constant_case":true,"control_structure_braces":true,"control_structure_continuation_position":true,"elseif":true,"indentation_type":true,"line_ending":true,"lowercase_keywords":true,"no_break_comment":true,"no_closing_tag":true,"no_multiple_statements_per_line":true,"no_space_around_double_colon":true,"no_spaces_after_function_name":true,"no_trailing_whitespace":true,"no_trailing_whitespace_in_comment":true,"single_blank_line_at_eof":true,"single_line_after_imports":true,"spaces_inside_parentheses":true,"switch_case_semicolon_to_colon":true,"switch_case_space":true,"encoding":true,"full_opening_tag":true},"hashes":{"server\/tests\/Feature.php":"9c85d3fc3571920ba5e59e6d460c5220","server\/src\/Providers\/RegistryBridgeServiceProvider.php":"58096e732d9cbf3b78f9fad4e9d2ddc4","server\/src\/Models\/RegistryUser.php":"c210bf9221b71148b95b130a1acdd1c4","server\/src\/Http\/Controllers\/Internal\/v1\/RegistryAuthController.php":"ff7e415c21ea0e16300512b58044e077","server\/src\/Http\/Controllers\/Internal\/v1\/RegistryController.php":"3eb08bbe917a48fa3e44ad436cb7692e","server\/src\/routes.php":"4d549319dc0031dbd27103b68f8a62c3",".php-cs-fixer.php":"97d0e7d944ae71fb5a3344df8ae2cd44","server\/src\/Requests\/AddRegistryUserRequest.php":"4c6dabd5b92f00552a557bb98c2c4101","server\/src\/Http\/Requests\/AddRegistryUserRequest.php":"fcf4a10fffa42e90130939577b79b297","server\/src\/Http\/Resources\/RegistryUser.php":"ed3f6b8f7fb792693d325b2b50fe81f9","server\/src\/Http\/Requests\/AuthenticateRegistryUserRequest.php":"a1aaefc85f959cad0873e866c526c94f","server\/src\/Models\/RegistryExtension.php":"93550d881c6a8e67817d1022ad1c1fab","server\/src\/Http\/Requests\/CreateRegistryExtensionRequest.php":"9f6b938816da7d089ec9b11a4056e545","server\/src\/Http\/Filter\/RegistryExtensionFilter.php":"62bc434d2449cb788ab77b2b8c692da0","server\/src\/Http\/Controllers\/Internal\/v1\/RegistryExtensionController.php":"06b34a93626e54a0a9aafa61484a79b4","server\/src\/Http\/Controllers\/RegistryBridgeController.php":"4239a6dd658e0b39532830de9ae66d32"}}
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -57,14 +57,14 @@ Install the PHP packages using Composer:

```bash
composer require fleetbase/core-api
composer require fleetbase/internals-api
composer require fleetbase/registry-bridge
```
### Frontend

Install the Ember.js Engine/Addon:

```bash
pnpm install @fleetbase/internals-engine
pnpm install @fleetbase/registry-bridge-engine
```

## Usage
Expand Down
5 changes: 5 additions & 0 deletions addon/adapters/registry-bridge.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
import ApplicationAdapter from '@fleetbase/ember-core/adapters/application';

export default class RegistryBridgeAdapter extends ApplicationAdapter {
namespace = '~registry/v1';
}
1 change: 1 addition & 0 deletions addon/adapters/registry-extension.js
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export { default } from './registry-bridge';
44 changes: 44 additions & 0 deletions addon/controllers/developers/extensions/edit.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
import Controller from '@ember/controller';
import { tracked } from '@glimmer/tracking';
import { inject as service } from '@ember/service';
import { action } from '@ember/object';
import { task } from 'ember-concurrency';

export default class DevelopersExtensionsEditController extends Controller {
@service store;
@service fetch;
@service currentUser;
@tracked uploadedFile;

@task *save() {
yield this.model.save();
}

@task *uploadIcon(file) {
yield this.fetch.uploadFile.perform(
file,
{
path: `uploads/extensions/${this.model.id}/icons`,
subject_uuid: this.model.id,
subject_type: 'registry-bridge:registry-extension',
type: 'extension_icon',
},
(uploadedFile) => {
this.model.setProperties({
icon_uuid: uploadedFile.id,
icon_url: uploadedFile.url,
});

return this.model.save();
}
);
}

@action addTag(tag) {
this.model.tags.pushObject(tag);
}

@action removeTag(index) {
this.model.tags.removeAt(index);
}
}
3 changes: 3 additions & 0 deletions addon/controllers/developers/extensions/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
import Controller from '@ember/controller';

export default class DevelopersExtensionsIndexController extends Controller {}
21 changes: 21 additions & 0 deletions addon/controllers/developers/extensions/new.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
import Controller from '@ember/controller';
import { tracked } from '@glimmer/tracking';
import { inject as service } from '@ember/service';
import { task } from 'ember-concurrency';

export default class DevelopersExtensionsNewController extends Controller {
@service store;
@service universe;
@service hostRouter;
@service notifications;
@tracked extension = this.store.createRecord('registry-extension');

@task *save() {
try {
yield this.extension.save();
} catch (error) {
return this.notifications.warning(error.message);
}
return this.hostRouter.transitionTo('console.registry-bridge.developers.extensions.edit', this.extension);
}
}
52 changes: 52 additions & 0 deletions addon/models/registry-extension.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
import Model, { attr, belongsTo } from '@ember-data/model';

export default class RegistryExtensionModel extends Model {
/** @ids */
@attr('string') uuid;
@attr('string') company_uuid;
@attr('string') created_by_uuid;
@attr('string') registry_user_uuid;
@attr('string') icon_uuid;
@attr('string') public_id;

/** @relationships */
@belongsTo('company') company;
@belongsTo('user') user;
@belongsTo('file') icon;

/** @attributes */
@attr('string', { defaultValue: 'https://flb-assets.s3.ap-southeast-1.amazonaws.com/static/default-extension-icon.svg' }) icon_url;
@attr('string') name;
@attr('string') subtitle;
@attr('boolean') payment_required;
@attr('number') price;
@attr('number') sale_price;
@attr('boolean') on_sale;
@attr('boolean') subscription_required;
@attr('string') subscription_billing_period;
@attr('string') subscription_model;
@attr('number') subscription_amount;
@attr('object') subscription_tiers;
@attr('string') slug;
@attr('string') version;
@attr('string') fa_icon;
@attr('string') description;
@attr('string') promotional_text;
@attr('string') website_url;
@attr('string') repo_url;
@attr('string') support_url;
@attr('string') privacy_policy_url;
@attr('string') tos_url;
@attr('string') copyright;
@attr('string') primary_language;
@attr('array') tags;
@attr('array') languages;
@attr('object') meta;
@attr('boolean') core_service;
@attr('string', { defaultValue: 'pending' }) status;

/** @dates */
@attr('date') created_at;
@attr('date') updated_at;
@attr('date') deleted_at;
}
4 changes: 2 additions & 2 deletions addon/routes.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@ export default buildRoutes(function () {
this.route('extensions', function () {
this.route('index', { path: '/' });
this.route('new');
this.route('edit', { path: '/edit/:public_id'});
this.route('details', { path: '/:public_id'});
this.route('edit', { path: '/edit/:public_id' });
this.route('details', { path: '/:public_id' });
});
});
});
3 changes: 3 additions & 0 deletions addon/routes/developers/analytics.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
import Route from '@ember/routing/route';

export default class DevelopersAnalyticsRoute extends Route {}
3 changes: 3 additions & 0 deletions addon/routes/developers/credentials.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
import Route from '@ember/routing/route';

export default class DevelopersCredentialsRoute extends Route {}
9 changes: 8 additions & 1 deletion addon/routes/developers/extensions/edit.js
Original file line number Diff line number Diff line change
@@ -1,3 +1,10 @@
import Route from '@ember/routing/route';
import { inject as service } from '@ember/service';

export default class DevelopersExtensionsEditRoute extends Route {}
export default class DevelopersExtensionsEditRoute extends Route {
@service store;

model(params) {
return this.store.findRecord('registry-extension', params.public_id);
}
}
9 changes: 8 additions & 1 deletion addon/routes/developers/extensions/index.js
Original file line number Diff line number Diff line change
@@ -1,3 +1,10 @@
import Route from '@ember/routing/route';
import { inject as service } from '@ember/service';

export default class DevelopersExtensionsIndexRoute extends Route {}
export default class DevelopersExtensionsIndexRoute extends Route {
@service store;

model() {
return this.store.findAll('registry-extension');
}
}
3 changes: 3 additions & 0 deletions addon/routes/developers/payments.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
import Route from '@ember/routing/route';

export default class DevelopersPaymentsRoute extends Route {}
Loading

0 comments on commit 63e3be9

Please sign in to comment.