Schedule posts to Bluesky with Cloudflare workers. skyscheduler.work
cf tool bsky-tool cloudflare bluesky schedule bsky service social-media cloudflare-workers

fix hot query

smh my dude

+965 -5
+2
migrations/0026_broad_terrax.sql
··· 1 + DROP INDEX `threadOrder_idx`;--> statement-breakpoint 2 + CREATE INDEX `threadOrder_idx` ON `posts` (`rootPost`,`threadOrder`) WHERE threadOrder <> -1;
+949
migrations/meta/0026_snapshot.json
··· 1 + { 2 + "version": "6", 3 + "dialect": "sqlite", 4 + "id": "281f6393-bc79-4cf2-b9a0-bdab20afd515", 5 + "prevId": "b19e8727-067c-4073-9390-f543f182da33", 6 + "tables": { 7 + "accounts": { 8 + "name": "accounts", 9 + "columns": { 10 + "id": { 11 + "name": "id", 12 + "type": "text", 13 + "primaryKey": true, 14 + "notNull": true, 15 + "autoincrement": false 16 + }, 17 + "account_id": { 18 + "name": "account_id", 19 + "type": "text", 20 + "primaryKey": false, 21 + "notNull": true, 22 + "autoincrement": false 23 + }, 24 + "provider_id": { 25 + "name": "provider_id", 26 + "type": "text", 27 + "primaryKey": false, 28 + "notNull": true, 29 + "autoincrement": false 30 + }, 31 + "user_id": { 32 + "name": "user_id", 33 + "type": "text", 34 + "primaryKey": false, 35 + "notNull": true, 36 + "autoincrement": false 37 + }, 38 + "access_token": { 39 + "name": "access_token", 40 + "type": "text", 41 + "primaryKey": false, 42 + "notNull": false, 43 + "autoincrement": false 44 + }, 45 + "refresh_token": { 46 + "name": "refresh_token", 47 + "type": "text", 48 + "primaryKey": false, 49 + "notNull": false, 50 + "autoincrement": false 51 + }, 52 + "id_token": { 53 + "name": "id_token", 54 + "type": "text", 55 + "primaryKey": false, 56 + "notNull": false, 57 + "autoincrement": false 58 + }, 59 + "access_token_expires_at": { 60 + "name": "access_token_expires_at", 61 + "type": "integer", 62 + "primaryKey": false, 63 + "notNull": false, 64 + "autoincrement": false 65 + }, 66 + "refresh_token_expires_at": { 67 + "name": "refresh_token_expires_at", 68 + "type": "integer", 69 + "primaryKey": false, 70 + "notNull": false, 71 + "autoincrement": false 72 + }, 73 + "scope": { 74 + "name": "scope", 75 + "type": "text", 76 + "primaryKey": false, 77 + "notNull": false, 78 + "autoincrement": false 79 + }, 80 + "password": { 81 + "name": "password", 82 + "type": "text", 83 + "primaryKey": false, 84 + "notNull": false, 85 + "autoincrement": false 86 + }, 87 + "created_at": { 88 + "name": "created_at", 89 + "type": "integer", 90 + "primaryKey": false, 91 + "notNull": true, 92 + "autoincrement": false, 93 + "default": "(cast(unixepoch('subsecond') * 1000 as integer))" 94 + }, 95 + "updated_at": { 96 + "name": "updated_at", 97 + "type": "integer", 98 + "primaryKey": false, 99 + "notNull": true, 100 + "autoincrement": false 101 + } 102 + }, 103 + "indexes": { 104 + "accounts_userId_idx": { 105 + "name": "accounts_userId_idx", 106 + "columns": [ 107 + "user_id" 108 + ], 109 + "isUnique": false 110 + } 111 + }, 112 + "foreignKeys": { 113 + "accounts_user_id_users_id_fk": { 114 + "name": "accounts_user_id_users_id_fk", 115 + "tableFrom": "accounts", 116 + "tableTo": "users", 117 + "columnsFrom": [ 118 + "user_id" 119 + ], 120 + "columnsTo": [ 121 + "id" 122 + ], 123 + "onDelete": "cascade", 124 + "onUpdate": "no action" 125 + } 126 + }, 127 + "compositePrimaryKeys": {}, 128 + "uniqueConstraints": {}, 129 + "checkConstraints": {} 130 + }, 131 + "sessions": { 132 + "name": "sessions", 133 + "columns": { 134 + "id": { 135 + "name": "id", 136 + "type": "text", 137 + "primaryKey": true, 138 + "notNull": true, 139 + "autoincrement": false 140 + }, 141 + "expires_at": { 142 + "name": "expires_at", 143 + "type": "integer", 144 + "primaryKey": false, 145 + "notNull": true, 146 + "autoincrement": false 147 + }, 148 + "token": { 149 + "name": "token", 150 + "type": "text", 151 + "primaryKey": false, 152 + "notNull": true, 153 + "autoincrement": false 154 + }, 155 + "created_at": { 156 + "name": "created_at", 157 + "type": "integer", 158 + "primaryKey": false, 159 + "notNull": true, 160 + "autoincrement": false, 161 + "default": "(cast(unixepoch('subsecond') * 1000 as integer))" 162 + }, 163 + "updated_at": { 164 + "name": "updated_at", 165 + "type": "integer", 166 + "primaryKey": false, 167 + "notNull": true, 168 + "autoincrement": false 169 + }, 170 + "ip_address": { 171 + "name": "ip_address", 172 + "type": "text", 173 + "primaryKey": false, 174 + "notNull": false, 175 + "autoincrement": false 176 + }, 177 + "user_agent": { 178 + "name": "user_agent", 179 + "type": "text", 180 + "primaryKey": false, 181 + "notNull": false, 182 + "autoincrement": false 183 + }, 184 + "user_id": { 185 + "name": "user_id", 186 + "type": "text", 187 + "primaryKey": false, 188 + "notNull": true, 189 + "autoincrement": false 190 + } 191 + }, 192 + "indexes": { 193 + "sessions_token_unique": { 194 + "name": "sessions_token_unique", 195 + "columns": [ 196 + "token" 197 + ], 198 + "isUnique": true 199 + }, 200 + "sessions_userId_idx": { 201 + "name": "sessions_userId_idx", 202 + "columns": [ 203 + "user_id" 204 + ], 205 + "isUnique": false 206 + } 207 + }, 208 + "foreignKeys": { 209 + "sessions_user_id_users_id_fk": { 210 + "name": "sessions_user_id_users_id_fk", 211 + "tableFrom": "sessions", 212 + "tableTo": "users", 213 + "columnsFrom": [ 214 + "user_id" 215 + ], 216 + "columnsTo": [ 217 + "id" 218 + ], 219 + "onDelete": "cascade", 220 + "onUpdate": "no action" 221 + } 222 + }, 223 + "compositePrimaryKeys": {}, 224 + "uniqueConstraints": {}, 225 + "checkConstraints": {} 226 + }, 227 + "users": { 228 + "name": "users", 229 + "columns": { 230 + "id": { 231 + "name": "id", 232 + "type": "text", 233 + "primaryKey": true, 234 + "notNull": true, 235 + "autoincrement": false 236 + }, 237 + "name": { 238 + "name": "name", 239 + "type": "text", 240 + "primaryKey": false, 241 + "notNull": true, 242 + "autoincrement": false 243 + }, 244 + "email": { 245 + "name": "email", 246 + "type": "text", 247 + "primaryKey": false, 248 + "notNull": true, 249 + "autoincrement": false 250 + }, 251 + "email_verified": { 252 + "name": "email_verified", 253 + "type": "integer", 254 + "primaryKey": false, 255 + "notNull": true, 256 + "autoincrement": false 257 + }, 258 + "image": { 259 + "name": "image", 260 + "type": "text", 261 + "primaryKey": false, 262 + "notNull": false, 263 + "autoincrement": false 264 + }, 265 + "created_at": { 266 + "name": "created_at", 267 + "type": "integer", 268 + "primaryKey": false, 269 + "notNull": true, 270 + "autoincrement": false 271 + }, 272 + "updated_at": { 273 + "name": "updated_at", 274 + "type": "integer", 275 + "primaryKey": false, 276 + "notNull": true, 277 + "autoincrement": false 278 + }, 279 + "username": { 280 + "name": "username", 281 + "type": "text", 282 + "primaryKey": false, 283 + "notNull": false, 284 + "autoincrement": false 285 + }, 286 + "display_username": { 287 + "name": "display_username", 288 + "type": "text", 289 + "primaryKey": false, 290 + "notNull": false, 291 + "autoincrement": false 292 + }, 293 + "bsky_app_pass": { 294 + "name": "bsky_app_pass", 295 + "type": "text", 296 + "primaryKey": false, 297 + "notNull": true, 298 + "autoincrement": false 299 + }, 300 + "pds": { 301 + "name": "pds", 302 + "type": "text", 303 + "primaryKey": false, 304 + "notNull": true, 305 + "autoincrement": false, 306 + "default": "'https://bsky.social'" 307 + } 308 + }, 309 + "indexes": { 310 + "users_email_unique": { 311 + "name": "users_email_unique", 312 + "columns": [ 313 + "email" 314 + ], 315 + "isUnique": true 316 + }, 317 + "users_username_unique": { 318 + "name": "users_username_unique", 319 + "columns": [ 320 + "username" 321 + ], 322 + "isUnique": true 323 + } 324 + }, 325 + "foreignKeys": {}, 326 + "compositePrimaryKeys": {}, 327 + "uniqueConstraints": {}, 328 + "checkConstraints": {} 329 + }, 330 + "verifications": { 331 + "name": "verifications", 332 + "columns": { 333 + "id": { 334 + "name": "id", 335 + "type": "text", 336 + "primaryKey": true, 337 + "notNull": true, 338 + "autoincrement": false 339 + }, 340 + "identifier": { 341 + "name": "identifier", 342 + "type": "text", 343 + "primaryKey": false, 344 + "notNull": true, 345 + "autoincrement": false 346 + }, 347 + "value": { 348 + "name": "value", 349 + "type": "text", 350 + "primaryKey": false, 351 + "notNull": true, 352 + "autoincrement": false 353 + }, 354 + "expires_at": { 355 + "name": "expires_at", 356 + "type": "integer", 357 + "primaryKey": false, 358 + "notNull": true, 359 + "autoincrement": false 360 + }, 361 + "created_at": { 362 + "name": "created_at", 363 + "type": "integer", 364 + "primaryKey": false, 365 + "notNull": true, 366 + "autoincrement": false, 367 + "default": "(cast(unixepoch('subsecond') * 1000 as integer))" 368 + }, 369 + "updated_at": { 370 + "name": "updated_at", 371 + "type": "integer", 372 + "primaryKey": false, 373 + "notNull": true, 374 + "autoincrement": false, 375 + "default": "(cast(unixepoch('subsecond') * 1000 as integer))" 376 + } 377 + }, 378 + "indexes": { 379 + "verifications_identifier_idx": { 380 + "name": "verifications_identifier_idx", 381 + "columns": [ 382 + "identifier" 383 + ], 384 + "isUnique": false 385 + } 386 + }, 387 + "foreignKeys": {}, 388 + "compositePrimaryKeys": {}, 389 + "uniqueConstraints": {}, 390 + "checkConstraints": {} 391 + }, 392 + "media": { 393 + "name": "media", 394 + "columns": { 395 + "file": { 396 + "name": "file", 397 + "type": "text", 398 + "primaryKey": true, 399 + "notNull": true, 400 + "autoincrement": false 401 + }, 402 + "hasPost": { 403 + "name": "hasPost", 404 + "type": "integer", 405 + "primaryKey": false, 406 + "notNull": false, 407 + "autoincrement": false, 408 + "default": false 409 + }, 410 + "user": { 411 + "name": "user", 412 + "type": "text", 413 + "primaryKey": false, 414 + "notNull": false, 415 + "autoincrement": false 416 + }, 417 + "created_at": { 418 + "name": "created_at", 419 + "type": "integer", 420 + "primaryKey": false, 421 + "notNull": true, 422 + "autoincrement": false 423 + } 424 + }, 425 + "indexes": { 426 + "media_oldWithNoPost_idx": { 427 + "name": "media_oldWithNoPost_idx", 428 + "columns": [ 429 + "hasPost", 430 + "created_at" 431 + ], 432 + "isUnique": false, 433 + "where": "hasPost = 0" 434 + }, 435 + "media_userid_idx": { 436 + "name": "media_userid_idx", 437 + "columns": [ 438 + "user" 439 + ], 440 + "isUnique": false 441 + } 442 + }, 443 + "foreignKeys": { 444 + "media_user_users_id_fk": { 445 + "name": "media_user_users_id_fk", 446 + "tableFrom": "media", 447 + "tableTo": "users", 448 + "columnsFrom": [ 449 + "user" 450 + ], 451 + "columnsTo": [ 452 + "id" 453 + ], 454 + "onDelete": "cascade", 455 + "onUpdate": "no action" 456 + } 457 + }, 458 + "compositePrimaryKeys": {}, 459 + "uniqueConstraints": {}, 460 + "checkConstraints": {} 461 + }, 462 + "posts": { 463 + "name": "posts", 464 + "columns": { 465 + "uuid": { 466 + "name": "uuid", 467 + "type": "text", 468 + "primaryKey": true, 469 + "notNull": true, 470 + "autoincrement": false 471 + }, 472 + "content": { 473 + "name": "content", 474 + "type": "text", 475 + "primaryKey": false, 476 + "notNull": true, 477 + "autoincrement": false 478 + }, 479 + "scheduled_date": { 480 + "name": "scheduled_date", 481 + "type": "integer", 482 + "primaryKey": false, 483 + "notNull": true, 484 + "autoincrement": false 485 + }, 486 + "posted": { 487 + "name": "posted", 488 + "type": "integer", 489 + "primaryKey": false, 490 + "notNull": false, 491 + "autoincrement": false, 492 + "default": false 493 + }, 494 + "postNow": { 495 + "name": "postNow", 496 + "type": "integer", 497 + "primaryKey": false, 498 + "notNull": false, 499 + "autoincrement": false, 500 + "default": false 501 + }, 502 + "embedContent": { 503 + "name": "embedContent", 504 + "type": "text", 505 + "primaryKey": false, 506 + "notNull": true, 507 + "autoincrement": false, 508 + "default": "(json_array())" 509 + }, 510 + "repostInfo": { 511 + "name": "repostInfo", 512 + "type": "text", 513 + "primaryKey": false, 514 + "notNull": false, 515 + "autoincrement": false 516 + }, 517 + "uri": { 518 + "name": "uri", 519 + "type": "text", 520 + "primaryKey": false, 521 + "notNull": false, 522 + "autoincrement": false 523 + }, 524 + "cid": { 525 + "name": "cid", 526 + "type": "text", 527 + "primaryKey": false, 528 + "notNull": false, 529 + "autoincrement": false 530 + }, 531 + "isRepost": { 532 + "name": "isRepost", 533 + "type": "integer", 534 + "primaryKey": false, 535 + "notNull": false, 536 + "autoincrement": false, 537 + "default": false 538 + }, 539 + "rootPost": { 540 + "name": "rootPost", 541 + "type": "text", 542 + "primaryKey": false, 543 + "notNull": false, 544 + "autoincrement": false 545 + }, 546 + "parentPost": { 547 + "name": "parentPost", 548 + "type": "text", 549 + "primaryKey": false, 550 + "notNull": false, 551 + "autoincrement": false 552 + }, 553 + "threadOrder": { 554 + "name": "threadOrder", 555 + "type": "integer", 556 + "primaryKey": false, 557 + "notNull": false, 558 + "autoincrement": false, 559 + "default": -1 560 + }, 561 + "contentLabel": { 562 + "name": "contentLabel", 563 + "type": "text", 564 + "primaryKey": false, 565 + "notNull": true, 566 + "autoincrement": false, 567 + "default": "'None'" 568 + }, 569 + "created_at": { 570 + "name": "created_at", 571 + "type": "integer", 572 + "primaryKey": false, 573 + "notNull": true, 574 + "autoincrement": false, 575 + "default": "CURRENT_TIMESTAMP" 576 + }, 577 + "updated_at": { 578 + "name": "updated_at", 579 + "type": "integer", 580 + "primaryKey": false, 581 + "notNull": false, 582 + "autoincrement": false 583 + }, 584 + "user": { 585 + "name": "user", 586 + "type": "text", 587 + "primaryKey": false, 588 + "notNull": true, 589 + "autoincrement": false 590 + } 591 + }, 592 + "indexes": { 593 + "user_idx": { 594 + "name": "user_idx", 595 + "columns": [ 596 + "user" 597 + ], 598 + "isUnique": false 599 + }, 600 + "postedUpdate_idx": { 601 + "name": "postedUpdate_idx", 602 + "columns": [ 603 + "updated_at", 604 + "posted" 605 + ], 606 + "isUnique": false, 607 + "where": "posted = 1" 608 + }, 609 + "repostOnlyUser_idx": { 610 + "name": "repostOnlyUser_idx", 611 + "columns": [ 612 + "user", 613 + "isRepost" 614 + ], 615 + "isUnique": false, 616 + "where": "isRepost = 1" 617 + }, 618 + "postedUUID_idx": { 619 + "name": "postedUUID_idx", 620 + "columns": [ 621 + "uuid", 622 + "posted" 623 + ], 624 + "isUnique": false 625 + }, 626 + "generalThread_idx": { 627 + "name": "generalThread_idx", 628 + "columns": [ 629 + "parentPost", 630 + "rootPost" 631 + ], 632 + "isUnique": false, 633 + "where": "parentPost is not NULL" 634 + }, 635 + "threadOrder_idx": { 636 + "name": "threadOrder_idx", 637 + "columns": [ 638 + "rootPost", 639 + "threadOrder" 640 + ], 641 + "isUnique": false, 642 + "where": "threadOrder <> -1" 643 + }, 644 + "postNowScheduledDatePosted_idx": { 645 + "name": "postNowScheduledDatePosted_idx", 646 + "columns": [ 647 + "posted", 648 + "scheduled_date", 649 + "postNow" 650 + ], 651 + "isUnique": false, 652 + "where": "posted = 0 and postNow <> 1" 653 + }, 654 + "repostAddOn_idx": { 655 + "name": "repostAddOn_idx", 656 + "columns": [ 657 + "user", 658 + "cid" 659 + ], 660 + "isUnique": false 661 + } 662 + }, 663 + "foreignKeys": { 664 + "posts_user_users_id_fk": { 665 + "name": "posts_user_users_id_fk", 666 + "tableFrom": "posts", 667 + "tableTo": "users", 668 + "columnsFrom": [ 669 + "user" 670 + ], 671 + "columnsTo": [ 672 + "id" 673 + ], 674 + "onDelete": "cascade", 675 + "onUpdate": "no action" 676 + } 677 + }, 678 + "compositePrimaryKeys": {}, 679 + "uniqueConstraints": {}, 680 + "checkConstraints": {} 681 + }, 682 + "repostCounts": { 683 + "name": "repostCounts", 684 + "columns": { 685 + "post_uuid": { 686 + "name": "post_uuid", 687 + "type": "text", 688 + "primaryKey": true, 689 + "notNull": true, 690 + "autoincrement": false 691 + }, 692 + "count": { 693 + "name": "count", 694 + "type": "integer", 695 + "primaryKey": false, 696 + "notNull": true, 697 + "autoincrement": false, 698 + "default": 0 699 + } 700 + }, 701 + "indexes": {}, 702 + "foreignKeys": { 703 + "repostCounts_post_uuid_posts_uuid_fk": { 704 + "name": "repostCounts_post_uuid_posts_uuid_fk", 705 + "tableFrom": "repostCounts", 706 + "tableTo": "posts", 707 + "columnsFrom": [ 708 + "post_uuid" 709 + ], 710 + "columnsTo": [ 711 + "uuid" 712 + ], 713 + "onDelete": "cascade", 714 + "onUpdate": "no action" 715 + } 716 + }, 717 + "compositePrimaryKeys": {}, 718 + "uniqueConstraints": {}, 719 + "checkConstraints": {} 720 + }, 721 + "reposts": { 722 + "name": "reposts", 723 + "columns": { 724 + "id": { 725 + "name": "id", 726 + "type": "integer", 727 + "primaryKey": true, 728 + "notNull": true, 729 + "autoincrement": true 730 + }, 731 + "post_uuid": { 732 + "name": "post_uuid", 733 + "type": "text", 734 + "primaryKey": false, 735 + "notNull": true, 736 + "autoincrement": false 737 + }, 738 + "scheduled_date": { 739 + "name": "scheduled_date", 740 + "type": "integer", 741 + "primaryKey": false, 742 + "notNull": true, 743 + "autoincrement": false 744 + }, 745 + "schedule_guid": { 746 + "name": "schedule_guid", 747 + "type": "text", 748 + "primaryKey": false, 749 + "notNull": false, 750 + "autoincrement": false 751 + } 752 + }, 753 + "indexes": { 754 + "repost_scheduledDate_idx": { 755 + "name": "repost_scheduledDate_idx", 756 + "columns": [ 757 + "scheduled_date" 758 + ], 759 + "isUnique": false 760 + }, 761 + "repost_postid_idx": { 762 + "name": "repost_postid_idx", 763 + "columns": [ 764 + "post_uuid" 765 + ], 766 + "isUnique": false 767 + }, 768 + "repost_scheduleGuid_idx": { 769 + "name": "repost_scheduleGuid_idx", 770 + "columns": [ 771 + "schedule_guid", 772 + "post_uuid" 773 + ], 774 + "isUnique": false 775 + }, 776 + "repost_noduplicates_idx": { 777 + "name": "repost_noduplicates_idx", 778 + "columns": [ 779 + "post_uuid", 780 + "scheduled_date" 781 + ], 782 + "isUnique": true 783 + } 784 + }, 785 + "foreignKeys": { 786 + "reposts_post_uuid_posts_uuid_fk": { 787 + "name": "reposts_post_uuid_posts_uuid_fk", 788 + "tableFrom": "reposts", 789 + "tableTo": "posts", 790 + "columnsFrom": [ 791 + "post_uuid" 792 + ], 793 + "columnsTo": [ 794 + "uuid" 795 + ], 796 + "onDelete": "cascade", 797 + "onUpdate": "no action" 798 + } 799 + }, 800 + "compositePrimaryKeys": {}, 801 + "uniqueConstraints": {}, 802 + "checkConstraints": {} 803 + }, 804 + "bans": { 805 + "name": "bans", 806 + "columns": { 807 + "account_did": { 808 + "name": "account_did", 809 + "type": "text", 810 + "primaryKey": true, 811 + "notNull": true, 812 + "autoincrement": false 813 + }, 814 + "banReason": { 815 + "name": "banReason", 816 + "type": "text", 817 + "primaryKey": false, 818 + "notNull": true, 819 + "autoincrement": false, 820 + "default": "''" 821 + }, 822 + "created_at": { 823 + "name": "created_at", 824 + "type": "integer", 825 + "primaryKey": false, 826 + "notNull": true, 827 + "autoincrement": false, 828 + "default": "CURRENT_TIMESTAMP" 829 + } 830 + }, 831 + "indexes": {}, 832 + "foreignKeys": {}, 833 + "compositePrimaryKeys": {}, 834 + "uniqueConstraints": {}, 835 + "checkConstraints": {} 836 + }, 837 + "violations": { 838 + "name": "violations", 839 + "columns": { 840 + "id": { 841 + "name": "id", 842 + "type": "integer", 843 + "primaryKey": true, 844 + "notNull": true, 845 + "autoincrement": true 846 + }, 847 + "user": { 848 + "name": "user", 849 + "type": "text", 850 + "primaryKey": false, 851 + "notNull": true, 852 + "autoincrement": false 853 + }, 854 + "tosViolation": { 855 + "name": "tosViolation", 856 + "type": "integer", 857 + "primaryKey": false, 858 + "notNull": false, 859 + "autoincrement": false, 860 + "default": false 861 + }, 862 + "userPassInvalid": { 863 + "name": "userPassInvalid", 864 + "type": "integer", 865 + "primaryKey": false, 866 + "notNull": false, 867 + "autoincrement": false, 868 + "default": false 869 + }, 870 + "accountSuspended": { 871 + "name": "accountSuspended", 872 + "type": "integer", 873 + "primaryKey": false, 874 + "notNull": false, 875 + "autoincrement": false, 876 + "default": false 877 + }, 878 + "accountGone": { 879 + "name": "accountGone", 880 + "type": "integer", 881 + "primaryKey": false, 882 + "notNull": false, 883 + "autoincrement": false, 884 + "default": false 885 + }, 886 + "mediaTooBig": { 887 + "name": "mediaTooBig", 888 + "type": "integer", 889 + "primaryKey": false, 890 + "notNull": false, 891 + "autoincrement": false, 892 + "default": false 893 + }, 894 + "created_at": { 895 + "name": "created_at", 896 + "type": "integer", 897 + "primaryKey": false, 898 + "notNull": true, 899 + "autoincrement": false, 900 + "default": "CURRENT_TIMESTAMP" 901 + } 902 + }, 903 + "indexes": { 904 + "violations_user_unique": { 905 + "name": "violations_user_unique", 906 + "columns": [ 907 + "user" 908 + ], 909 + "isUnique": true 910 + }, 911 + "violations_user_idx": { 912 + "name": "violations_user_idx", 913 + "columns": [ 914 + "user" 915 + ], 916 + "isUnique": false 917 + } 918 + }, 919 + "foreignKeys": { 920 + "violations_user_users_id_fk": { 921 + "name": "violations_user_users_id_fk", 922 + "tableFrom": "violations", 923 + "tableTo": "users", 924 + "columnsFrom": [ 925 + "user" 926 + ], 927 + "columnsTo": [ 928 + "id" 929 + ], 930 + "onDelete": "cascade", 931 + "onUpdate": "no action" 932 + } 933 + }, 934 + "compositePrimaryKeys": {}, 935 + "uniqueConstraints": {}, 936 + "checkConstraints": {} 937 + } 938 + }, 939 + "views": {}, 940 + "enums": {}, 941 + "_meta": { 942 + "schemas": {}, 943 + "tables": {}, 944 + "columns": {} 945 + }, 946 + "internal": { 947 + "indexes": {} 948 + } 949 + }
+7
migrations/meta/_journal.json
··· 183 183 "when": 1771043534550, 184 184 "tag": "0025_gifted_dust", 185 185 "breakpoints": true 186 + }, 187 + { 188 + "idx": 26, 189 + "version": "6", 190 + "when": 1771382185456, 191 + "tag": "0026_broad_terrax", 192 + "breakpoints": true 186 193 } 187 194 ] 188 195 }
+1 -1
src/db/app.schema.ts
··· 53 53 // Updating thread orders 54 54 index("threadOrder_idx") 55 55 .on(table.rootPost, table.threadOrder) 56 - .where(sql`threadOrder >= 0`), 56 + .where(sql`threadOrder <> -1`), 57 57 // cron job 58 58 index("postNowScheduledDatePosted_idx") 59 59 .on(table.posted, table.scheduledDate, table.postNow)
+3 -1
src/index.tsx
··· 179 179 } 180 180 // Handle queue acknowledgement on success/failure 181 181 if (!wasSuccess) { 182 - message.retry({delaySeconds: delay*(message.attempts+1)}); 182 + const delaySeconds = delay*(message.attempts+1); 183 + console.log(`attempting to retry message in ${delaySeconds}`); 184 + message.retry({delaySeconds: delaySeconds}); 183 185 } else { 184 186 message.ack(); 185 187 }
+3 -3
src/utils/dbQuery.ts
··· 1 1 import { addHours, isAfter, isEqual } from "date-fns"; 2 - import { and, asc, desc, eq, getTableColumns, gt, gte, sql } from "drizzle-orm"; 2 + import { and, asc, desc, eq, getTableColumns, gt, gte, ne, sql } from "drizzle-orm"; 3 3 import { BatchItem } from "drizzle-orm/batch"; 4 4 import { DrizzleD1Database } from "drizzle-orm/d1"; 5 5 import has from "just-has"; ··· 132 132 // Update the post order past here 133 133 queriesToExecute.push(db.update(posts).set({threadOrder: sql`threadOrder - 1`}) 134 134 .where( 135 - and(eq(posts.rootPost, postObj.rootPost!), gt(posts.threadOrder, postObj.threadOrder) 135 + and(and(eq(posts.rootPost, postObj.rootPost!), ne(posts.threadOrder, -1)), gt(posts.threadOrder, postObj.threadOrder) 136 136 ))); 137 137 } 138 138 ··· 269 269 // update all posts past this one to also update their order (we will take their id) 270 270 dbOperations.push(db.update(posts).set({threadOrder: sql`threadOrder + 1`}) 271 271 .where( 272 - and(eq(posts.rootPost, rootPostID!), gte(posts.threadOrder, parentPostOrder) 272 + and(and(eq(posts.rootPost, rootPostID!), ne(posts.threadOrder, -1)), gte(posts.threadOrder, parentPostOrder) 273 273 ))); 274 274 275 275 // Update the root post so that it has the correct flags set on it as well.