Merge pull request #10522 from appwrite/refactor-schedules

refactor: improve code readability for schedules
This commit is contained in:
Jake Barnby 2025-09-23 15:08:49 +12:00 committed by GitHub
commit dece9c8d53
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
9 changed files with 35 additions and 22 deletions

View file

@ -3102,7 +3102,7 @@ App::post('/v1/messaging/messages/email')
case MessageStatus::SCHEDULED:
$schedule = $dbForPlatform->createDocument('schedules', new Document([
'region' => $project->getAttribute('region'),
'resourceType' => 'message',
'resourceType' => SCHEDULE_RESOURCE_TYPE_MESSAGE,
'resourceId' => $message->getId(),
'resourceInternalId' => $message->getSequence(),
'resourceUpdatedAt' => DateTime::now(),
@ -3244,7 +3244,7 @@ App::post('/v1/messaging/messages/sms')
case MessageStatus::SCHEDULED:
$schedule = $dbForPlatform->createDocument('schedules', new Document([
'region' => $project->getAttribute('region'),
'resourceType' => 'message',
'resourceType' => SCHEDULE_RESOURCE_TYPE_MESSAGE,
'resourceId' => $message->getId(),
'resourceInternalId' => $message->getSequence(),
'resourceUpdatedAt' => DateTime::now(),
@ -3462,7 +3462,7 @@ App::post('/v1/messaging/messages/push')
case MessageStatus::SCHEDULED:
$schedule = $dbForPlatform->createDocument('schedules', new Document([
'region' => $project->getAttribute('region'),
'resourceType' => 'message',
'resourceType' => SCHEDULE_RESOURCE_TYPE_MESSAGE,
'resourceId' => $message->getId(),
'resourceInternalId' => $message->getSequence(),
'resourceUpdatedAt' => DateTime::now(),
@ -3863,7 +3863,7 @@ App::patch('/v1/messaging/messages/email/:messageId')
if (\is_null($currentScheduledAt) && !\is_null($scheduledAt)) {
$schedule = $dbForPlatform->createDocument('schedules', new Document([
'region' => $project->getAttribute('region'),
'resourceType' => 'message',
'resourceType' => SCHEDULE_RESOURCE_TYPE_MESSAGE,
'resourceId' => $message->getId(),
'resourceInternalId' => $message->getSequence(),
'resourceUpdatedAt' => DateTime::now(),
@ -4084,7 +4084,7 @@ App::patch('/v1/messaging/messages/sms/:messageId')
if (\is_null($currentScheduledAt) && !\is_null($scheduledAt)) {
$schedule = $dbForPlatform->createDocument('schedules', new Document([
'region' => $project->getAttribute('region'),
'resourceType' => 'message',
'resourceType' => SCHEDULE_RESOURCE_TYPE_MESSAGE,
'resourceId' => $message->getId(),
'resourceInternalId' => $message->getSequence(),
'resourceUpdatedAt' => DateTime::now(),
@ -4258,7 +4258,7 @@ App::patch('/v1/messaging/messages/push/:messageId')
if (\is_null($currentScheduledAt) && !\is_null($scheduledAt)) {
$schedule = $dbForPlatform->createDocument('schedules', new Document([
'region' => $project->getAttribute('region'),
'resourceType' => 'message',
'resourceType' => SCHEDULE_RESOURCE_TYPE_MESSAGE,
'resourceId' => $message->getId(),
'resourceInternalId' => $message->getSequence(),
'resourceUpdatedAt' => DateTime::now(),

View file

@ -262,7 +262,6 @@ const METRIC_SITES_ID_INBOUND = 'sites.{siteInternalId}.inbound';
const METRIC_SITES_ID_OUTBOUND = 'sites.{siteInternalId}.outbound';
// Resource types
const RESOURCE_TYPE_PROJECTS = 'projects';
const RESOURCE_TYPE_FUNCTIONS = 'functions';
const RESOURCE_TYPE_SITES = 'sites';
@ -272,10 +271,15 @@ const RESOURCE_TYPE_PROVIDERS = 'providers';
const RESOURCE_TYPE_TOPICS = 'topics';
const RESOURCE_TYPE_SUBSCRIBERS = 'subscribers';
const RESOURCE_TYPE_MESSAGES = 'messages';
const RESOURCE_TYPE_EXECUTIONS = 'executions';
// Resource types for Tokens
const TOKENS_RESOURCE_TYPE_FILES = 'files';
const TOKENS_RESOURCE_TYPE_SITES = 'sites';
const TOKENS_RESOURCE_TYPE_FUNCTIONS = 'functions';
const TOKENS_RESOURCE_TYPE_DATABASES = 'databases';
// Resource types for Schedules
const SCHEDULE_RESOURCE_TYPE_EXECUTION = 'execution';
const SCHEDULE_RESOURCE_TYPE_FUNCTION = 'function';
const SCHEDULE_RESOURCE_TYPE_MESSAGE = 'message';

View file

@ -730,8 +730,8 @@ class V19 extends Migration
if (empty($document->getAttribute('scheduleId', null))) {
$schedule = $this->dbForPlatform->createDocument('schedules', new Document([
'region' => $project->getAttribute('region'),
'resourceType' => 'function',
'region' => $this->project->getAttribute('region'),
'resourceType' => SCHEDULE_RESOURCE_TYPE_FUNCTION,
'resourceId' => $document->getId(),
'resourceInternalId' => $document->getSequence(),
'resourceUpdatedAt' => DateTime::now(),

View file

@ -11,7 +11,6 @@ use Appwrite\Extend\Exception;
use Appwrite\Extend\Exception as AppwriteException;
use Appwrite\Functions\Validator\Headers;
use Appwrite\Platform\Modules\Compute\Base;
use Appwrite\Platform\Tasks\ScheduleExecutions;
use Appwrite\SDK\AuthType;
use Appwrite\SDK\ContentType;
use Appwrite\SDK\Method;
@ -313,7 +312,7 @@ class Create extends Base
$schedule = $dbForPlatform->createDocument('schedules', new Document([
'region' => $project->getAttribute('region'),
'resourceType' => ScheduleExecutions::getSupportedResource(),
'resourceType' => SCHEDULE_RESOURCE_TYPE_EXECUTION,
'resourceId' => $execution->getId(),
'resourceInternalId' => $execution->getSequence(),
'resourceUpdatedAt' => DateTime::now(),

View file

@ -5,7 +5,6 @@ namespace Appwrite\Platform\Modules\Functions\Http\Executions;
use Appwrite\Event\Event;
use Appwrite\Extend\Exception;
use Appwrite\Platform\Modules\Compute\Base;
use Appwrite\Platform\Tasks\ScheduleExecutions;
use Appwrite\SDK\AuthType;
use Appwrite\SDK\ContentType;
use Appwrite\SDK\Method;
@ -100,7 +99,7 @@ class Delete extends Base
if ($status === 'scheduled') {
$schedule = $dbForPlatform->findOne('schedules', [
Query::equal('resourceId', [$execution->getId()]),
Query::equal('resourceType', [ScheduleExecutions::getSupportedResource()]),
Query::equal('resourceType', [SCHEDULE_RESOURCE_TYPE_EXECUTION]),
Query::equal('active', [true]),
]);

View file

@ -235,7 +235,7 @@ class Create extends Base
$schedule = Authorization::skip(
fn () => $dbForPlatform->createDocument('schedules', new Document([
'region' => $project->getAttribute('region'),
'resourceType' => 'function',
'resourceType' => SCHEDULE_RESOURCE_TYPE_FUNCTION,
'resourceId' => $function->getId(),
'resourceInternalId' => $function->getSequence(),
'resourceUpdatedAt' => DateTime::now(),

View file

@ -6,6 +6,12 @@ use Appwrite\Event\Func;
use Swoole\Coroutine as Co;
use Utopia\Database\Database;
/**
* ScheduleExecutions
*
* Handles delayed executions by processing one-time scheduled tasks
* that are executed at a specific future time.
*/
class ScheduleExecutions extends ScheduleBase
{
public const UPDATE_TIMER = 3; // seconds
@ -18,12 +24,12 @@ class ScheduleExecutions extends ScheduleBase
public static function getSupportedResource(): string
{
return 'execution';
return SCHEDULE_RESOURCE_TYPE_EXECUTION;
}
public static function getCollectionId(): string
{
return 'executions';
return RESOURCE_TYPE_EXECUTIONS;
}
protected function enqueueResources(Database $dbForPlatform, callable $getProjectDB): void

View file

@ -7,8 +7,13 @@ use Cron\CronExpression;
use Utopia\CLI\Console;
use Utopia\Database\Database;
use Utopia\Database\DateTime;
use Utopia\Pools\Group;
/**
* ScheduleFunctions
*
* Handles cron job related executions by processing cron expressions
* and scheduling function executions based on recurring schedules.
*/
class ScheduleFunctions extends ScheduleBase
{
public const UPDATE_TIMER = 10; // seconds
@ -23,12 +28,12 @@ class ScheduleFunctions extends ScheduleBase
public static function getSupportedResource(): string
{
return 'function';
return SCHEDULE_RESOURCE_TYPE_FUNCTION;
}
public static function getCollectionId(): string
{
return 'functions';
return RESOURCE_TYPE_FUNCTIONS;
}
protected function enqueueResources(Database $dbForPlatform, callable $getProjectDB): void

View file

@ -17,12 +17,12 @@ class ScheduleMessages extends ScheduleBase
public static function getSupportedResource(): string
{
return 'message';
return SCHEDULE_RESOURCE_TYPE_MESSAGE;
}
public static function getCollectionId(): string
{
return 'messages';
return RESOURCE_TYPE_MESSAGES;
}
protected function enqueueResources(Database $dbForPlatform, callable $getProjectDB): void