appwrite-utils-cli 0.10.86 → 1.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.appwrite/.yaml_schemas/appwrite-config.schema.json +380 -0
- package/.appwrite/.yaml_schemas/collection.schema.json +255 -0
- package/.appwrite/collections/Categories.yaml +182 -0
- package/.appwrite/collections/ExampleCollection.yaml +36 -0
- package/.appwrite/collections/Posts.yaml +227 -0
- package/.appwrite/collections/Users.yaml +149 -0
- package/.appwrite/config.yaml +109 -0
- package/.appwrite/import/README.md +148 -0
- package/.appwrite/import/categories-import.yaml +129 -0
- package/.appwrite/import/posts-import.yaml +208 -0
- package/.appwrite/import/users-import.yaml +130 -0
- package/.appwrite/importData/categories.json +194 -0
- package/.appwrite/importData/posts.json +270 -0
- package/.appwrite/importData/users.json +220 -0
- package/.appwrite/schemas/categories.json +128 -0
- package/.appwrite/schemas/exampleCollection.json +52 -0
- package/.appwrite/schemas/posts.json +173 -0
- package/.appwrite/schemas/users.json +125 -0
- package/README.md +264 -33
- package/dist/collections/attributes.js +3 -2
- package/dist/collections/methods.js +56 -38
- package/dist/config/yamlConfig.d.ts +501 -0
- package/dist/config/yamlConfig.js +452 -0
- package/dist/databases/setup.d.ts +6 -0
- package/dist/databases/setup.js +119 -0
- package/dist/functions/methods.d.ts +1 -1
- package/dist/functions/methods.js +5 -2
- package/dist/functions/openapi.d.ts +4 -0
- package/dist/functions/openapi.js +60 -0
- package/dist/interactiveCLI.d.ts +5 -0
- package/dist/interactiveCLI.js +194 -49
- package/dist/main.js +91 -30
- package/dist/migrations/afterImportActions.js +2 -2
- package/dist/migrations/appwriteToX.d.ts +10 -0
- package/dist/migrations/appwriteToX.js +15 -4
- package/dist/migrations/backup.d.ts +16 -16
- package/dist/migrations/dataLoader.d.ts +83 -1
- package/dist/migrations/dataLoader.js +4 -4
- package/dist/migrations/importController.js +25 -18
- package/dist/migrations/importDataActions.js +2 -2
- package/dist/migrations/logging.d.ts +9 -1
- package/dist/migrations/logging.js +41 -22
- package/dist/migrations/migrationHelper.d.ts +4 -4
- package/dist/migrations/relationships.js +1 -1
- package/dist/migrations/services/DataTransformationService.d.ts +55 -0
- package/dist/migrations/services/DataTransformationService.js +158 -0
- package/dist/migrations/services/FileHandlerService.d.ts +75 -0
- package/dist/migrations/services/FileHandlerService.js +236 -0
- package/dist/migrations/services/ImportOrchestrator.d.ts +97 -0
- package/dist/migrations/services/ImportOrchestrator.js +488 -0
- package/dist/migrations/services/RateLimitManager.d.ts +138 -0
- package/dist/migrations/services/RateLimitManager.js +279 -0
- package/dist/migrations/services/RelationshipResolver.d.ts +120 -0
- package/dist/migrations/services/RelationshipResolver.js +332 -0
- package/dist/migrations/services/UserMappingService.d.ts +109 -0
- package/dist/migrations/services/UserMappingService.js +277 -0
- package/dist/migrations/services/ValidationService.d.ts +74 -0
- package/dist/migrations/services/ValidationService.js +260 -0
- package/dist/migrations/transfer.d.ts +0 -6
- package/dist/migrations/transfer.js +16 -132
- package/dist/migrations/yaml/YamlImportConfigLoader.d.ts +384 -0
- package/dist/migrations/yaml/YamlImportConfigLoader.js +375 -0
- package/dist/migrations/yaml/YamlImportIntegration.d.ts +87 -0
- package/dist/migrations/yaml/YamlImportIntegration.js +330 -0
- package/dist/migrations/yaml/generateImportSchemas.d.ts +17 -0
- package/dist/migrations/yaml/generateImportSchemas.js +575 -0
- package/dist/schemas/authUser.d.ts +9 -9
- package/dist/shared/attributeManager.d.ts +17 -0
- package/dist/shared/attributeManager.js +273 -0
- package/dist/shared/confirmationDialogs.d.ts +75 -0
- package/dist/shared/confirmationDialogs.js +236 -0
- package/dist/shared/functionManager.d.ts +48 -0
- package/dist/shared/functionManager.js +322 -0
- package/dist/shared/indexManager.d.ts +24 -0
- package/dist/shared/indexManager.js +150 -0
- package/dist/shared/jsonSchemaGenerator.d.ts +51 -0
- package/dist/shared/jsonSchemaGenerator.js +313 -0
- package/dist/shared/logging.d.ts +10 -0
- package/dist/shared/logging.js +46 -0
- package/dist/shared/messageFormatter.d.ts +37 -0
- package/dist/shared/messageFormatter.js +152 -0
- package/dist/shared/migrationHelpers.d.ts +173 -0
- package/dist/shared/migrationHelpers.js +142 -0
- package/dist/shared/operationLogger.d.ts +3 -0
- package/dist/shared/operationLogger.js +25 -0
- package/dist/shared/operationQueue.d.ts +13 -0
- package/dist/shared/operationQueue.js +79 -0
- package/dist/shared/progressManager.d.ts +62 -0
- package/dist/shared/progressManager.js +215 -0
- package/dist/shared/schemaGenerator.d.ts +18 -0
- package/dist/shared/schemaGenerator.js +523 -0
- package/dist/storage/methods.d.ts +3 -1
- package/dist/storage/methods.js +144 -55
- package/dist/storage/schemas.d.ts +56 -16
- package/dist/types.d.ts +2 -2
- package/dist/types.js +1 -1
- package/dist/users/methods.d.ts +16 -0
- package/dist/users/methods.js +276 -0
- package/dist/utils/configMigration.d.ts +1 -0
- package/dist/utils/configMigration.js +262 -0
- package/dist/utils/dataConverters.d.ts +46 -0
- package/dist/utils/dataConverters.js +139 -0
- package/dist/utils/loadConfigs.d.ts +15 -4
- package/dist/utils/loadConfigs.js +379 -51
- package/dist/utils/schemaStrings.js +2 -1
- package/dist/utils/setupFiles.d.ts +2 -1
- package/dist/utils/setupFiles.js +723 -28
- package/dist/utils/validationRules.d.ts +43 -0
- package/dist/utils/validationRules.js +42 -0
- package/dist/utils/yamlConverter.d.ts +48 -0
- package/dist/utils/yamlConverter.js +98 -0
- package/dist/utilsController.js +65 -43
- package/package.json +19 -15
- package/src/collections/attributes.ts +3 -2
- package/src/collections/methods.ts +85 -51
- package/src/config/yamlConfig.ts +488 -0
- package/src/{migrations/setupDatabase.ts → databases/setup.ts} +11 -5
- package/src/functions/methods.ts +8 -4
- package/src/functions/templates/count-docs-in-collection/package.json +25 -0
- package/src/functions/templates/count-docs-in-collection/tsconfig.json +28 -0
- package/src/functions/templates/typescript-node/package.json +24 -0
- package/src/functions/templates/typescript-node/tsconfig.json +28 -0
- package/src/functions/templates/uv/README.md +31 -0
- package/src/functions/templates/uv/pyproject.toml +29 -0
- package/src/interactiveCLI.ts +226 -61
- package/src/main.ts +111 -37
- package/src/migrations/afterImportActions.ts +2 -2
- package/src/migrations/appwriteToX.ts +17 -4
- package/src/migrations/dataLoader.ts +4 -4
- package/src/migrations/importController.ts +30 -22
- package/src/migrations/importDataActions.ts +2 -2
- package/src/migrations/relationships.ts +1 -1
- package/src/migrations/services/DataTransformationService.ts +196 -0
- package/src/migrations/services/FileHandlerService.ts +311 -0
- package/src/migrations/services/ImportOrchestrator.ts +669 -0
- package/src/migrations/services/RateLimitManager.ts +363 -0
- package/src/migrations/services/RelationshipResolver.ts +461 -0
- package/src/migrations/services/UserMappingService.ts +345 -0
- package/src/migrations/services/ValidationService.ts +349 -0
- package/src/migrations/transfer.ts +22 -228
- package/src/migrations/yaml/YamlImportConfigLoader.ts +427 -0
- package/src/migrations/yaml/YamlImportIntegration.ts +419 -0
- package/src/migrations/yaml/generateImportSchemas.ts +589 -0
- package/src/shared/attributeManager.ts +429 -0
- package/src/shared/confirmationDialogs.ts +327 -0
- package/src/shared/functionManager.ts +515 -0
- package/src/shared/indexManager.ts +253 -0
- package/src/shared/jsonSchemaGenerator.ts +403 -0
- package/src/shared/logging.ts +74 -0
- package/src/shared/messageFormatter.ts +195 -0
- package/src/{migrations/migrationHelper.ts → shared/migrationHelpers.ts} +22 -4
- package/src/{migrations/helper.ts → shared/operationLogger.ts} +7 -2
- package/src/{migrations/queue.ts → shared/operationQueue.ts} +1 -1
- package/src/shared/progressManager.ts +278 -0
- package/src/{migrations/schemaStrings.ts → shared/schemaGenerator.ts} +71 -17
- package/src/storage/methods.ts +199 -78
- package/src/types.ts +2 -2
- package/src/{migrations/users.ts → users/methods.ts} +2 -2
- package/src/utils/configMigration.ts +349 -0
- package/src/utils/loadConfigs.ts +416 -52
- package/src/utils/schemaStrings.ts +2 -1
- package/src/utils/setupFiles.ts +742 -40
- package/src/{migrations → utils}/validationRules.ts +1 -1
- package/src/utils/yamlConverter.ts +131 -0
- package/src/utilsController.ts +75 -54
- package/src/functions/templates/poetry/README.md +0 -30
- package/src/functions/templates/poetry/pyproject.toml +0 -16
- package/src/migrations/attributes.ts +0 -561
- package/src/migrations/backup.ts +0 -205
- package/src/migrations/databases.ts +0 -39
- package/src/migrations/dbHelpers.ts +0 -92
- package/src/migrations/indexes.ts +0 -40
- package/src/migrations/logging.ts +0 -29
- package/src/migrations/storage.ts +0 -538
- /package/src/{migrations → functions}/openapi.ts +0 -0
- /package/src/functions/templates/{poetry → uv}/src/__init__.py +0 -0
- /package/src/functions/templates/{poetry → uv}/src/index.py +0 -0
- /package/src/{migrations/converters.ts → utils/dataConverters.ts} +0 -0
@@ -0,0 +1,182 @@
|
|
1
|
+
# yaml-language-server: $schema=../.yaml_schemas/collection.schema.json
|
2
|
+
# Collection Definition: Categories
|
3
|
+
name: Categories
|
4
|
+
id: 01JYDBQTB5W8SCBAYB654CATEG
|
5
|
+
documentSecurity: false
|
6
|
+
enabled: true
|
7
|
+
permissions:
|
8
|
+
- permission: read
|
9
|
+
target: any
|
10
|
+
- permission: create
|
11
|
+
target: users
|
12
|
+
- permission: update
|
13
|
+
target: users
|
14
|
+
- permission: delete
|
15
|
+
target: users
|
16
|
+
|
17
|
+
attributes:
|
18
|
+
# Core Information
|
19
|
+
- key: name
|
20
|
+
type: string
|
21
|
+
size: 100
|
22
|
+
required: true
|
23
|
+
description: "Category name or title"
|
24
|
+
|
25
|
+
- key: slug
|
26
|
+
type: string
|
27
|
+
size: 120
|
28
|
+
required: false
|
29
|
+
description: "URL-friendly version of the category name"
|
30
|
+
|
31
|
+
- key: description
|
32
|
+
type: string
|
33
|
+
size: 500
|
34
|
+
required: false
|
35
|
+
description: "Detailed description of the category"
|
36
|
+
|
37
|
+
# Hierarchy Support
|
38
|
+
- key: parentId
|
39
|
+
type: string
|
40
|
+
size: 50
|
41
|
+
required: false
|
42
|
+
description: "Parent category ID for hierarchical structure (manual reference)"
|
43
|
+
|
44
|
+
- key: level
|
45
|
+
type: integer
|
46
|
+
required: true
|
47
|
+
default: 0
|
48
|
+
min: 0
|
49
|
+
max: 5
|
50
|
+
description: "Hierarchy level (0 = root, 1 = subcategory, etc.)"
|
51
|
+
|
52
|
+
- key: sortOrder
|
53
|
+
type: integer
|
54
|
+
required: true
|
55
|
+
default: 0
|
56
|
+
description: "Sort order within the same level"
|
57
|
+
|
58
|
+
# Visual & Branding
|
59
|
+
- key: colorCode
|
60
|
+
type: string
|
61
|
+
size: 7
|
62
|
+
required: false
|
63
|
+
description: "Hex color code for category branding (e.g., #FF5733)"
|
64
|
+
|
65
|
+
- key: icon
|
66
|
+
type: string
|
67
|
+
size: 50
|
68
|
+
required: false
|
69
|
+
description: "Icon name or class for category display"
|
70
|
+
|
71
|
+
- key: coverImage
|
72
|
+
type: string
|
73
|
+
size: 255
|
74
|
+
required: false
|
75
|
+
description: "Cover image file ID for category header"
|
76
|
+
|
77
|
+
# Status & Management
|
78
|
+
- key: isActive
|
79
|
+
type: boolean
|
80
|
+
required: true
|
81
|
+
default: true
|
82
|
+
description: "Whether the category is active and visible"
|
83
|
+
|
84
|
+
- key: isFeatured
|
85
|
+
type: boolean
|
86
|
+
required: true
|
87
|
+
default: false
|
88
|
+
description: "Whether the category is featured"
|
89
|
+
|
90
|
+
# Statistics
|
91
|
+
- key: postCount
|
92
|
+
type: integer
|
93
|
+
required: true
|
94
|
+
default: 0
|
95
|
+
min: 0
|
96
|
+
description: "Number of posts in this category"
|
97
|
+
|
98
|
+
- key: totalPostCount
|
99
|
+
type: integer
|
100
|
+
required: true
|
101
|
+
default: 0
|
102
|
+
min: 0
|
103
|
+
description: "Total posts including subcategories"
|
104
|
+
|
105
|
+
# SEO
|
106
|
+
- key: metaTitle
|
107
|
+
type: string
|
108
|
+
size: 60
|
109
|
+
required: false
|
110
|
+
description: "SEO meta title for category page"
|
111
|
+
|
112
|
+
- key: metaDescription
|
113
|
+
type: string
|
114
|
+
size: 160
|
115
|
+
required: false
|
116
|
+
description: "SEO meta description for category page"
|
117
|
+
|
118
|
+
# Content Guidelines
|
119
|
+
- key: guidelines
|
120
|
+
type: string
|
121
|
+
size: 1000
|
122
|
+
required: false
|
123
|
+
description: "Content guidelines or rules for this category"
|
124
|
+
|
125
|
+
indexes:
|
126
|
+
# Search indexes
|
127
|
+
- key: name_search
|
128
|
+
type: fulltext
|
129
|
+
attributes:
|
130
|
+
- name
|
131
|
+
|
132
|
+
- key: description_search
|
133
|
+
type: fulltext
|
134
|
+
attributes:
|
135
|
+
- description
|
136
|
+
|
137
|
+
# Hierarchy queries
|
138
|
+
- key: parent_level
|
139
|
+
type: key
|
140
|
+
attributes:
|
141
|
+
- parentId
|
142
|
+
- level
|
143
|
+
|
144
|
+
- key: level_sort
|
145
|
+
type: key
|
146
|
+
attributes:
|
147
|
+
- level
|
148
|
+
- sortOrder
|
149
|
+
|
150
|
+
# Status queries
|
151
|
+
- key: active_featured
|
152
|
+
type: key
|
153
|
+
attributes:
|
154
|
+
- isActive
|
155
|
+
- isFeatured
|
156
|
+
|
157
|
+
- key: active_sort
|
158
|
+
type: key
|
159
|
+
attributes:
|
160
|
+
- isActive
|
161
|
+
- sortOrder
|
162
|
+
|
163
|
+
# Statistics
|
164
|
+
- key: post_count_desc
|
165
|
+
type: key
|
166
|
+
attributes:
|
167
|
+
- postCount
|
168
|
+
orders:
|
169
|
+
- desc
|
170
|
+
|
171
|
+
# Unique constraints
|
172
|
+
- key: name_unique
|
173
|
+
type: unique
|
174
|
+
attributes:
|
175
|
+
- name
|
176
|
+
|
177
|
+
- key: slug_unique
|
178
|
+
type: unique
|
179
|
+
attributes:
|
180
|
+
- slug
|
181
|
+
|
182
|
+
importDefs: []
|
@@ -0,0 +1,36 @@
|
|
1
|
+
# yaml-language-server: $schema=../.yaml_schemas/collection.schema.json
|
2
|
+
# Example Collection Definition
|
3
|
+
name: ExampleCollection
|
4
|
+
id: example_collection_1750645834708
|
5
|
+
documentSecurity: false
|
6
|
+
enabled: true
|
7
|
+
permissions:
|
8
|
+
- permission: read
|
9
|
+
target: any
|
10
|
+
- permission: create
|
11
|
+
target: users
|
12
|
+
- permission: update
|
13
|
+
target: users
|
14
|
+
- permission: delete
|
15
|
+
target: users
|
16
|
+
attributes:
|
17
|
+
- key: title
|
18
|
+
type: string
|
19
|
+
size: 255
|
20
|
+
required: true
|
21
|
+
description: "The title of the item"
|
22
|
+
- key: description
|
23
|
+
type: string
|
24
|
+
size: 1000
|
25
|
+
required: false
|
26
|
+
description: "A longer description"
|
27
|
+
- key: isActive
|
28
|
+
type: boolean
|
29
|
+
required: false
|
30
|
+
default: true
|
31
|
+
indexes:
|
32
|
+
- key: title_search
|
33
|
+
type: fulltext
|
34
|
+
attributes:
|
35
|
+
- title
|
36
|
+
importDefs: []
|
@@ -0,0 +1,227 @@
|
|
1
|
+
# yaml-language-server: $schema=../.yaml_schemas/collection.schema.json
|
2
|
+
# Collection Definition: Posts
|
3
|
+
name: Posts
|
4
|
+
id: 01JYDBQTB5W8SCBAYB654POSTS
|
5
|
+
documentSecurity: false
|
6
|
+
enabled: true
|
7
|
+
permissions:
|
8
|
+
- permission: read
|
9
|
+
target: any
|
10
|
+
- permission: create
|
11
|
+
target: users
|
12
|
+
- permission: update
|
13
|
+
target: users
|
14
|
+
- permission: delete
|
15
|
+
target: users
|
16
|
+
|
17
|
+
attributes:
|
18
|
+
# Core Content
|
19
|
+
- key: title
|
20
|
+
type: string
|
21
|
+
size: 200
|
22
|
+
required: true
|
23
|
+
description: "Post title or headline"
|
24
|
+
|
25
|
+
- key: slug
|
26
|
+
type: string
|
27
|
+
size: 250
|
28
|
+
required: false
|
29
|
+
description: "URL-friendly version of the title"
|
30
|
+
|
31
|
+
- key: content
|
32
|
+
type: string
|
33
|
+
size: 10000
|
34
|
+
required: true
|
35
|
+
description: "Main post content (supports HTML/Markdown)"
|
36
|
+
|
37
|
+
- key: excerpt
|
38
|
+
type: string
|
39
|
+
size: 500
|
40
|
+
required: false
|
41
|
+
description: "Brief summary or excerpt of the post"
|
42
|
+
|
43
|
+
# Relationships (manual references)
|
44
|
+
- key: authorId
|
45
|
+
type: string
|
46
|
+
size: 50
|
47
|
+
required: true
|
48
|
+
description: "User ID of the post author (manual reference)"
|
49
|
+
|
50
|
+
- key: categoryId
|
51
|
+
type: string
|
52
|
+
size: 50
|
53
|
+
required: false
|
54
|
+
description: "Category ID for the post (manual reference)"
|
55
|
+
|
56
|
+
# Media
|
57
|
+
- key: featuredImage
|
58
|
+
type: string
|
59
|
+
size: 255
|
60
|
+
required: false
|
61
|
+
description: "Featured image file ID stored in Appwrite storage"
|
62
|
+
|
63
|
+
- key: gallery
|
64
|
+
type: string
|
65
|
+
size: 2000
|
66
|
+
required: false
|
67
|
+
array: true
|
68
|
+
description: "Array of image file IDs for post gallery"
|
69
|
+
|
70
|
+
# Metadata
|
71
|
+
- key: tags
|
72
|
+
type: string
|
73
|
+
size: 50
|
74
|
+
required: false
|
75
|
+
array: true
|
76
|
+
description: "Array of tags associated with the post"
|
77
|
+
|
78
|
+
- key: status
|
79
|
+
type: enum
|
80
|
+
elements: ["draft", "published", "archived", "scheduled"]
|
81
|
+
required: true
|
82
|
+
default: "draft"
|
83
|
+
description: "Publication status of the post"
|
84
|
+
|
85
|
+
- key: publishedAt
|
86
|
+
type: datetime
|
87
|
+
required: false
|
88
|
+
description: "Date and time when the post was published"
|
89
|
+
|
90
|
+
- key: scheduledAt
|
91
|
+
type: datetime
|
92
|
+
required: false
|
93
|
+
description: "Date and time when the post is scheduled to be published"
|
94
|
+
|
95
|
+
# Engagement Metrics
|
96
|
+
- key: viewCount
|
97
|
+
type: integer
|
98
|
+
required: true
|
99
|
+
default: 0
|
100
|
+
min: 0
|
101
|
+
description: "Number of times the post has been viewed"
|
102
|
+
|
103
|
+
- key: likeCount
|
104
|
+
type: integer
|
105
|
+
required: true
|
106
|
+
default: 0
|
107
|
+
min: 0
|
108
|
+
description: "Number of likes the post has received"
|
109
|
+
|
110
|
+
- key: commentCount
|
111
|
+
type: integer
|
112
|
+
required: true
|
113
|
+
default: 0
|
114
|
+
min: 0
|
115
|
+
description: "Number of comments on the post"
|
116
|
+
|
117
|
+
- key: shareCount
|
118
|
+
type: integer
|
119
|
+
required: true
|
120
|
+
default: 0
|
121
|
+
min: 0
|
122
|
+
description: "Number of times the post has been shared"
|
123
|
+
|
124
|
+
# SEO & Social
|
125
|
+
- key: metaTitle
|
126
|
+
type: string
|
127
|
+
size: 60
|
128
|
+
required: false
|
129
|
+
description: "SEO meta title (max 60 chars)"
|
130
|
+
|
131
|
+
- key: metaDescription
|
132
|
+
type: string
|
133
|
+
size: 160
|
134
|
+
required: false
|
135
|
+
description: "SEO meta description (max 160 chars)"
|
136
|
+
|
137
|
+
- key: socialImage
|
138
|
+
type: string
|
139
|
+
size: 255
|
140
|
+
required: false
|
141
|
+
description: "Social media sharing image file ID"
|
142
|
+
|
143
|
+
# Reading Time
|
144
|
+
- key: readingTime
|
145
|
+
type: integer
|
146
|
+
required: false
|
147
|
+
min: 1
|
148
|
+
description: "Estimated reading time in minutes"
|
149
|
+
|
150
|
+
# Featured Status
|
151
|
+
- key: isFeatured
|
152
|
+
type: boolean
|
153
|
+
required: true
|
154
|
+
default: false
|
155
|
+
description: "Whether this post is featured on the homepage"
|
156
|
+
|
157
|
+
- key: isPinned
|
158
|
+
type: boolean
|
159
|
+
required: true
|
160
|
+
default: false
|
161
|
+
description: "Whether this post is pinned to the top"
|
162
|
+
|
163
|
+
indexes:
|
164
|
+
# Search indexes
|
165
|
+
- key: title_search
|
166
|
+
type: fulltext
|
167
|
+
attributes:
|
168
|
+
- title
|
169
|
+
|
170
|
+
- key: content_search
|
171
|
+
type: fulltext
|
172
|
+
attributes:
|
173
|
+
- content
|
174
|
+
|
175
|
+
- key: combined_search
|
176
|
+
type: fulltext
|
177
|
+
attributes:
|
178
|
+
- title
|
179
|
+
- content
|
180
|
+
- excerpt
|
181
|
+
|
182
|
+
# Query optimization
|
183
|
+
- key: status_published
|
184
|
+
type: key
|
185
|
+
attributes:
|
186
|
+
- status
|
187
|
+
- publishedAt
|
188
|
+
|
189
|
+
- key: author_status
|
190
|
+
type: key
|
191
|
+
attributes:
|
192
|
+
- authorId
|
193
|
+
- status
|
194
|
+
|
195
|
+
- key: category_status
|
196
|
+
type: key
|
197
|
+
attributes:
|
198
|
+
- categoryId
|
199
|
+
- status
|
200
|
+
|
201
|
+
- key: featured_status
|
202
|
+
type: key
|
203
|
+
attributes:
|
204
|
+
- isFeatured
|
205
|
+
- status
|
206
|
+
|
207
|
+
- key: views_desc
|
208
|
+
type: key
|
209
|
+
attributes:
|
210
|
+
- viewCount
|
211
|
+
orders:
|
212
|
+
- desc
|
213
|
+
|
214
|
+
- key: likes_desc
|
215
|
+
type: key
|
216
|
+
attributes:
|
217
|
+
- likeCount
|
218
|
+
orders:
|
219
|
+
- desc
|
220
|
+
|
221
|
+
# Unique constraints
|
222
|
+
- key: slug_unique
|
223
|
+
type: unique
|
224
|
+
attributes:
|
225
|
+
- slug
|
226
|
+
|
227
|
+
importDefs: []
|
@@ -0,0 +1,149 @@
|
|
1
|
+
# yaml-language-server: $schema=../.yaml_schemas/collection.schema.json
|
2
|
+
# Collection Definition: Users
|
3
|
+
name: Users
|
4
|
+
id: 01JYDBQTB5W8SCBAYB654CCADQ
|
5
|
+
documentSecurity: false
|
6
|
+
enabled: true
|
7
|
+
permissions:
|
8
|
+
- permission: read
|
9
|
+
target: any
|
10
|
+
- permission: create
|
11
|
+
target: users
|
12
|
+
- permission: update
|
13
|
+
target: users
|
14
|
+
- permission: delete
|
15
|
+
target: users
|
16
|
+
|
17
|
+
attributes:
|
18
|
+
# Core Identity
|
19
|
+
- key: name
|
20
|
+
type: string
|
21
|
+
size: 100
|
22
|
+
required: true
|
23
|
+
description: "User's full name"
|
24
|
+
|
25
|
+
- key: email
|
26
|
+
type: email
|
27
|
+
required: true
|
28
|
+
description: "User's email address for authentication"
|
29
|
+
|
30
|
+
- key: username
|
31
|
+
type: string
|
32
|
+
size: 50
|
33
|
+
required: false
|
34
|
+
description: "Unique username handle"
|
35
|
+
|
36
|
+
# Profile Information
|
37
|
+
- key: avatar
|
38
|
+
type: string
|
39
|
+
size: 255
|
40
|
+
required: false
|
41
|
+
description: "User avatar file ID stored in Appwrite storage"
|
42
|
+
|
43
|
+
- key: phone
|
44
|
+
type: string
|
45
|
+
size: 20
|
46
|
+
required: false
|
47
|
+
description: "User's phone number"
|
48
|
+
|
49
|
+
- key: bio
|
50
|
+
type: string
|
51
|
+
size: 500
|
52
|
+
required: false
|
53
|
+
description: "User biography or description"
|
54
|
+
|
55
|
+
- key: dateOfBirth
|
56
|
+
type: datetime
|
57
|
+
required: false
|
58
|
+
description: "User's date of birth"
|
59
|
+
|
60
|
+
- key: location
|
61
|
+
type: string
|
62
|
+
size: 100
|
63
|
+
required: false
|
64
|
+
description: "User's location or city"
|
65
|
+
|
66
|
+
# User Management
|
67
|
+
- key: role
|
68
|
+
type: enum
|
69
|
+
elements: ["admin", "user", "moderator", "editor"]
|
70
|
+
required: true
|
71
|
+
default: "user"
|
72
|
+
description: "User's role in the system"
|
73
|
+
|
74
|
+
- key: isActive
|
75
|
+
type: boolean
|
76
|
+
required: true
|
77
|
+
default: true
|
78
|
+
description: "Whether the user account is active"
|
79
|
+
|
80
|
+
- key: isVerified
|
81
|
+
type: boolean
|
82
|
+
required: true
|
83
|
+
default: false
|
84
|
+
description: "Whether the user's email is verified"
|
85
|
+
|
86
|
+
# Statistics
|
87
|
+
- key: profileViews
|
88
|
+
type: integer
|
89
|
+
required: true
|
90
|
+
default: 0
|
91
|
+
min: 0
|
92
|
+
description: "Number of times user profile has been viewed"
|
93
|
+
|
94
|
+
- key: lastLoginAt
|
95
|
+
type: datetime
|
96
|
+
required: false
|
97
|
+
description: "Timestamp of user's last login"
|
98
|
+
|
99
|
+
# Social Links
|
100
|
+
- key: socialLinks
|
101
|
+
type: string
|
102
|
+
size: 1000
|
103
|
+
required: false
|
104
|
+
description: "JSON string of social media links"
|
105
|
+
|
106
|
+
# Preferences
|
107
|
+
- key: preferences
|
108
|
+
type: string
|
109
|
+
size: 2000
|
110
|
+
required: false
|
111
|
+
description: "JSON string of user preferences and settings"
|
112
|
+
|
113
|
+
indexes:
|
114
|
+
# Search indexes
|
115
|
+
- key: name_search
|
116
|
+
type: fulltext
|
117
|
+
attributes:
|
118
|
+
- name
|
119
|
+
|
120
|
+
- key: bio_search
|
121
|
+
type: fulltext
|
122
|
+
attributes:
|
123
|
+
- bio
|
124
|
+
|
125
|
+
# Unique constraints
|
126
|
+
- key: email_unique
|
127
|
+
type: unique
|
128
|
+
attributes:
|
129
|
+
- email
|
130
|
+
|
131
|
+
- key: username_unique
|
132
|
+
type: unique
|
133
|
+
attributes:
|
134
|
+
- username
|
135
|
+
|
136
|
+
# Query optimization
|
137
|
+
- key: role_active
|
138
|
+
type: key
|
139
|
+
attributes:
|
140
|
+
- role
|
141
|
+
- isActive
|
142
|
+
|
143
|
+
- key: verified_active
|
144
|
+
type: key
|
145
|
+
attributes:
|
146
|
+
- isVerified
|
147
|
+
- isActive
|
148
|
+
|
149
|
+
importDefs: []
|
@@ -0,0 +1,109 @@
|
|
1
|
+
# yaml-language-server: $schema=./.yaml_schemas/appwrite-config.schema.json
|
2
|
+
appwrite:
|
3
|
+
endpoint: https://appwrite.blackleafdigital.com/v1
|
4
|
+
project: 65f31b9f540542961b39
|
5
|
+
key: >-
|
6
|
+
standard_ed867273aaee1398af3598a649500249b0402402106eb426a50b9903c81925ffe25c2d876897021fc9521faad6efad58e849dd79f42f610279d6eaa70a5104ecce97a7a421647ef06407364958e0952978d3b3a7a3c8ae3bb0b7c6872b9e071b2cd0fee077598db19c2fe9678a3c762e18a6c6272c8a37a0b4204184119903d4
|
7
|
+
logging:
|
8
|
+
enabled: false
|
9
|
+
level: info
|
10
|
+
console: false
|
11
|
+
logDirectory: ./logs
|
12
|
+
backups:
|
13
|
+
enabled: true
|
14
|
+
interval: 3600
|
15
|
+
retention: 30
|
16
|
+
cleanup: true
|
17
|
+
data:
|
18
|
+
enableMockData: false
|
19
|
+
documentBucketId: documents
|
20
|
+
usersCollectionName: Users
|
21
|
+
importDirectory: importData
|
22
|
+
schemas:
|
23
|
+
outputDirectory: schemas
|
24
|
+
yamlSchemaDirectory: .yaml_schemas
|
25
|
+
migrations:
|
26
|
+
enabled: true
|
27
|
+
databases:
|
28
|
+
- id: main
|
29
|
+
name: Main Database
|
30
|
+
collections:
|
31
|
+
- Users
|
32
|
+
- Posts
|
33
|
+
- Categories
|
34
|
+
buckets:
|
35
|
+
- id: documents
|
36
|
+
name: Documents
|
37
|
+
permissions:
|
38
|
+
- permission: read
|
39
|
+
target: any
|
40
|
+
- permission: create
|
41
|
+
target: users
|
42
|
+
- permission: update
|
43
|
+
target: users
|
44
|
+
- permission: delete
|
45
|
+
target: users
|
46
|
+
fileSecurity: false
|
47
|
+
enabled: true
|
48
|
+
maximumFileSize: 30000000
|
49
|
+
allowedFileExtensions: []
|
50
|
+
compression: gzip
|
51
|
+
encryption: true
|
52
|
+
antivirus: true
|
53
|
+
- id: images
|
54
|
+
name: Images & Media
|
55
|
+
permissions:
|
56
|
+
- permission: read
|
57
|
+
target: any
|
58
|
+
- permission: create
|
59
|
+
target: users
|
60
|
+
fileSecurity: false
|
61
|
+
enabled: true
|
62
|
+
maximumFileSize: 10000000
|
63
|
+
allowedFileExtensions:
|
64
|
+
- jpg
|
65
|
+
- jpeg
|
66
|
+
- png
|
67
|
+
- gif
|
68
|
+
- webp
|
69
|
+
- svg
|
70
|
+
compression: gzip
|
71
|
+
encryption: false
|
72
|
+
antivirus: true
|
73
|
+
- id: avatars
|
74
|
+
name: User Avatars
|
75
|
+
permissions:
|
76
|
+
- permission: read
|
77
|
+
target: any
|
78
|
+
- permission: create
|
79
|
+
target: users
|
80
|
+
- permission: update
|
81
|
+
target: users
|
82
|
+
- permission: delete
|
83
|
+
target: users
|
84
|
+
fileSecurity: false
|
85
|
+
enabled: true
|
86
|
+
maximumFileSize: 5000000
|
87
|
+
allowedFileExtensions:
|
88
|
+
- jpg
|
89
|
+
- jpeg
|
90
|
+
- png
|
91
|
+
- webp
|
92
|
+
compression: gzip
|
93
|
+
encryption: false
|
94
|
+
antivirus: true
|
95
|
+
functions:
|
96
|
+
- id: 01JYENQDVSN3TVH1MVCBW0C2Y3
|
97
|
+
name: TestCountDocs
|
98
|
+
runtime: node-21.0
|
99
|
+
execute:
|
100
|
+
- any
|
101
|
+
events: []
|
102
|
+
schedule: ''
|
103
|
+
timeout: 15
|
104
|
+
enabled: true
|
105
|
+
logging: true
|
106
|
+
entrypoint: src/main.ts
|
107
|
+
commands: npm install && npm run build
|
108
|
+
scopes: []
|
109
|
+
specification: s-1vcpu-512mb
|