This topic is a living topic, where I share status updates to give you more transparency about new features.
My main task is backup at the moment, but it is more complicated than I thought, because of the following reason:
Each database entry gets a unique id, so when you restore a backup you either have to delete the old items like schemas, contents or assets or you have to create new ids.
The first idea was to assign new ids to all items when you restore a backup. This would also allow it to clone an app. But this leads to the following problems:
- When you reference a content by id and restore a backup you would also have to update this reference.
- All references in the backup must also be changed, e.g. if you add a link to an asset in a content and you restore this content you also have to update the url in your text. A very slow operation and complicated task due to the dynamic nature of squidex.
- You database gets bigger and bigger over time, when you restore backups multiple times.
Therefore I have decided to add a feature to permanently delete apps. Then the ids are free again and you can restore the backup. See this trello task: https://trello.com/c/gneJYobR/102-cleanup-process-that-deletes-all-deleted-apps.
This feature will probably not available with EventStore, because there is no efficient way to delete from EventStore.
I thought I implement something small and useful today and added autocompletion to the asset tags.
Migrate schemas to a different account
Still working on the restore and backup system. The first release will be an admin tool and only allows you to transfer apps from one instance to another. The reason is that to restore an app that already exists you have to remove the app first and by that I mean removing everything. And this is not as easy as I thought. In fact it is very complicated and risky.
I have merged in the restore branch. For now it is an admin only feature to get feedback first and make it stable.
- Does not work with old backups, you have to make new backups.
- Only an admin feature.
- Will generate new ids for all items, because it could generate conflict otherwise with old content.
You can also assign new app names when you recover a backup. Feedback is very welcome.
I have forgotten to mention @pushrbx. I merged in a PR request that reduces the size of the docker image by about 50%. Thank you very much.
This works for free accounts? How i access this feature?
As I said: It is an admin feature. Admin != Owner. The reason is that I want to test it first before I make it publicly available. But it will be available to everybody in a week or so. It will also be available for free accounts.
Thanks for the reply!
This feature is awesome, just tested it locally.
Good work and valuable feature.
Added a rule action to make a status update at twitter
My personal goal is to write more blog posts and use Squidex for that and when a blog post is published with Squidex it should appear under https://squidex.io and medium and also a post to this topic and to twitter.
Hi, guys. This is the next update. Created from Squidex itself with the new discourse rule action. More stuff and details about this feature soon.
With discourse action I also refactored the rule system. Before it followed a layered architecture, but you had to make dozens of changes in different files.
It is much easier now because you only have to create 5 files to create a new rule action now and hopefully only 2 when we can autogenerate the UI for an action in a later release. It is about 150 lines of C# code which is very good I would say.
it is also the first step to a plugin system, where we have to sharpen our interfaces.
Oh wow, Discourse action. That is awesome!
Regarding the refactoring: I guess you will need to write some extra docs for it.
Yes, thats the goal to write more docs about extension points
A small feature today:
Statistics grouped by clients:
The feature was requested by a user who had a bug in his client and consumed almost all his API calls within a few days and it was hard for him to find out what happened with all the API calls.