gitextract_6obqz5rx/ ├── .dockerignore ├── .gitattributes ├── .github/ │ ├── ISSUE_TEMPLATE/ │ │ ├── bug_report.md │ │ ├── discussion---request-for-commentary--rfc-.md │ │ └── feature_request.md │ └── workflows/ │ ├── build.yml │ ├── frontend-lint.yml │ └── golangci-lint.yml ├── .gitignore ├── .golangci.yml ├── CLAUDE.md ├── LICENSE ├── Makefile ├── README.md ├── cmd/ │ └── stash-box/ │ ├── init.go │ └── main.go ├── docker/ │ ├── build/ │ │ └── x86_64/ │ │ ├── Dockerfile │ │ ├── db/ │ │ │ └── initdb.sh │ │ └── docker-compose.yml │ ├── ci/ │ │ └── x86_64/ │ │ ├── Dockerfile │ │ └── docker_push.sh │ └── production/ │ ├── docker-compose.yml │ └── postgres/ │ └── Dockerfile ├── frontend/ │ ├── .gitattributes │ ├── .gitignore │ ├── .nvmrc │ ├── README.md │ ├── biome.json │ ├── codegen.yml │ ├── embed.go │ ├── index.html │ ├── package.json │ ├── src/ │ │ ├── App.scss │ │ ├── App.tsx │ │ ├── Login.tsx │ │ ├── Main.tsx │ │ ├── components/ │ │ │ ├── amendableEditCard/ │ │ │ │ ├── AmendableChangeRow.tsx │ │ │ │ ├── AmendableImageChangeRow.tsx │ │ │ │ ├── AmendableLinkedChangeRow.tsx │ │ │ │ ├── AmendableListChangeRow.tsx │ │ │ │ ├── AmendableModifyEdit.tsx │ │ │ │ ├── AmendableURLChangeRow.tsx │ │ │ │ ├── AmendmentContext.tsx │ │ │ │ └── index.ts │ │ │ ├── changeRow/ │ │ │ │ ├── ChangeRow.tsx │ │ │ │ └── index.ts │ │ │ ├── checkboxSelect/ │ │ │ │ ├── CheckboxSelect.tsx │ │ │ │ ├── index.ts │ │ │ │ └── styles.scss │ │ │ ├── deleteButton/ │ │ │ │ ├── DeleteButton.tsx │ │ │ │ └── index.ts │ │ │ ├── editCard/ │ │ │ │ ├── AddComment.tsx │ │ │ │ ├── EditCard.tsx │ │ │ │ ├── EditComment.tsx │ │ │ │ ├── EditExpiration.tsx │ │ │ │ ├── EditHeader.tsx │ │ │ │ ├── EditStatus.tsx │ │ │ │ ├── ModifyEdit.tsx │ │ │ │ ├── VoteBar.tsx │ │ │ │ ├── Votes.tsx │ │ │ │ ├── index.ts │ │ │ │ ├── renderEntity.tsx │ │ │ │ └── styles.scss │ │ │ ├── editImages/ │ │ │ │ ├── editImages.tsx │ │ │ │ ├── index.ts │ │ │ │ └── styles.scss │ │ │ ├── form/ │ │ │ │ ├── BodyModification.tsx │ │ │ │ ├── EditNote.tsx │ │ │ │ ├── Image.tsx │ │ │ │ ├── NavButtons.tsx │ │ │ │ ├── NoteInput.tsx │ │ │ │ ├── SubmitButtons.tsx │ │ │ │ ├── index.ts │ │ │ │ └── styles.scss │ │ │ ├── fragments/ │ │ │ │ ├── ErrorMessage.tsx │ │ │ │ ├── Favorite.tsx │ │ │ │ ├── GenderIcon.tsx │ │ │ │ ├── Help.tsx │ │ │ │ ├── Icon.tsx │ │ │ │ ├── LoadingIndicator.tsx │ │ │ │ ├── PerformerName.tsx │ │ │ │ ├── SearchHint.tsx │ │ │ │ ├── SearchInput.tsx │ │ │ │ ├── SiteLink.tsx │ │ │ │ ├── TagLink.tsx │ │ │ │ ├── Thumbnail.tsx │ │ │ │ ├── Tooltip.tsx │ │ │ │ ├── index.ts │ │ │ │ └── styles.scss │ │ │ ├── image/ │ │ │ │ ├── Image.tsx │ │ │ │ ├── index.ts │ │ │ │ └── styles.scss │ │ │ ├── imageCarousel/ │ │ │ │ ├── ImageCarousel.tsx │ │ │ │ ├── index.ts │ │ │ │ └── styles.scss │ │ │ ├── imageChangeRow/ │ │ │ │ ├── ImageChangeRow.tsx │ │ │ │ ├── index.ts │ │ │ │ └── styles.scss │ │ │ ├── linkedChangeRow/ │ │ │ │ ├── LinkedChangeRow.tsx │ │ │ │ └── index.ts │ │ │ ├── list/ │ │ │ │ ├── EditList.tsx │ │ │ │ ├── List.tsx │ │ │ │ ├── SceneList.tsx │ │ │ │ ├── TagList.tsx │ │ │ │ ├── URLList.tsx │ │ │ │ ├── index.ts │ │ │ │ └── styles.scss │ │ │ ├── listChangeRow/ │ │ │ │ ├── ListChangeRow.tsx │ │ │ │ └── index.ts │ │ │ ├── modal/ │ │ │ │ ├── Modal.tsx │ │ │ │ └── index.ts │ │ │ ├── multiSelect/ │ │ │ │ ├── MultiSelect.tsx │ │ │ │ ├── index.ts │ │ │ │ └── styles.scss │ │ │ ├── pagination/ │ │ │ │ ├── Pagination.tsx │ │ │ │ └── index.ts │ │ │ ├── performerCard/ │ │ │ │ ├── PerformerCard.tsx │ │ │ │ ├── index.ts │ │ │ │ └── styles.scss │ │ │ ├── performerSelect/ │ │ │ │ ├── PerformerSelect.tsx │ │ │ │ ├── index.ts │ │ │ │ └── styles.scss │ │ │ ├── sceneCard/ │ │ │ │ ├── SceneCard.tsx │ │ │ │ ├── index.ts │ │ │ │ └── styles.scss │ │ │ ├── searchField/ │ │ │ │ ├── SearchField.tsx │ │ │ │ ├── handleResult.ts │ │ │ │ ├── index.ts │ │ │ │ └── styles.scss │ │ │ ├── studioSelect/ │ │ │ │ ├── StudioSelect.tsx │ │ │ │ ├── index.ts │ │ │ │ └── styles.scss │ │ │ ├── tagFilter/ │ │ │ │ ├── TagFilter.tsx │ │ │ │ ├── index.ts │ │ │ │ └── styles.scss │ │ │ ├── tagSelect/ │ │ │ │ ├── TagSelect.tsx │ │ │ │ ├── index.ts │ │ │ │ └── styles.scss │ │ │ ├── title/ │ │ │ │ ├── Title.tsx │ │ │ │ └── index.ts │ │ │ ├── urlChangeRow/ │ │ │ │ ├── URLChangeRow.tsx │ │ │ │ └── index.ts │ │ │ └── urlInput/ │ │ │ ├── index.ts │ │ │ ├── styles.scss │ │ │ └── urlInput.tsx │ │ ├── constants/ │ │ │ ├── enums.ts │ │ │ ├── index.ts │ │ │ └── route.ts │ │ ├── context.tsx │ │ ├── graphql/ │ │ │ ├── fragments/ │ │ │ │ ├── CommentFragment.gql │ │ │ │ ├── EditFragment.gql │ │ │ │ ├── FingerprintFragment.gql │ │ │ │ ├── ImageFragment.gql │ │ │ │ ├── PerformerFragment.gql │ │ │ │ ├── QuerySceneFragment.gql │ │ │ │ ├── SceneFragment.gql │ │ │ │ ├── ScenePerformerFragment.gql │ │ │ │ ├── SearchPerformerFragment.gql │ │ │ │ ├── StudioFragment.gql │ │ │ │ ├── TagFragment.gql │ │ │ │ └── URLFragment.gql │ │ │ ├── index.ts │ │ │ ├── mutations/ │ │ │ │ ├── ActivateNewUser.gql │ │ │ │ ├── AddImage.gql │ │ │ │ ├── AddScene.gql │ │ │ │ ├── AddSite.gql │ │ │ │ ├── AddStudio.gql │ │ │ │ ├── AddTagCategory.gql │ │ │ │ ├── AddUser.gql │ │ │ │ ├── AmendEdit.gql │ │ │ │ ├── ApplyEdit.gql │ │ │ │ ├── CancelEdit.gql │ │ │ │ ├── ChangePassword.gql │ │ │ │ ├── ConfirmChangeEmail.gql │ │ │ │ ├── DeleteDraft.gql │ │ │ │ ├── DeleteEdit.gql │ │ │ │ ├── DeleteFingerprintSubmissions.gql │ │ │ │ ├── DeleteScene.gql │ │ │ │ ├── DeleteSite.gql │ │ │ │ ├── DeleteStudio.gql │ │ │ │ ├── DeleteTagCategory.gql │ │ │ │ ├── DeleteUser.gql │ │ │ │ ├── EditComment.gql │ │ │ │ ├── FavoritePerformer.gql │ │ │ │ ├── FavoriteStudio.gql │ │ │ │ ├── GenerateInviteCode.gql │ │ │ │ ├── GrantInvite.gql │ │ │ │ ├── MarkNotificationRead.gql │ │ │ │ ├── MarkNotificationsRead.gql │ │ │ │ ├── MoveFingerprintSubmissions.gql │ │ │ │ ├── NewUser.gql │ │ │ │ ├── PerformerEdit.gql │ │ │ │ ├── PerformerEditUpdate.gql │ │ │ │ ├── RegenerateAPIKey.gql │ │ │ │ ├── RequestChangeEmail.gql │ │ │ │ ├── RescindInviteCode.gql │ │ │ │ ├── ResetPassword.gql │ │ │ │ ├── RevokeInvite.gql │ │ │ │ ├── SceneEdit.gql │ │ │ │ ├── SceneEditUpdate.gql │ │ │ │ ├── StudioEdit.gql │ │ │ │ ├── StudioEditUpdate.gql │ │ │ │ ├── TagEdit.gql │ │ │ │ ├── TagEditUpdate.gql │ │ │ │ ├── UnmatchFingerprint.gql │ │ │ │ ├── UpdateNotificationSubscriptions.gql │ │ │ │ ├── UpdateScene.gql │ │ │ │ ├── UpdateSite.gql │ │ │ │ ├── UpdateStudio.gql │ │ │ │ ├── UpdateTagCategory.gql │ │ │ │ ├── UpdateUser.gql │ │ │ │ ├── ValidateChangeEmail.gql │ │ │ │ ├── Vote.gql │ │ │ │ └── index.ts │ │ │ ├── queries/ │ │ │ │ ├── Categories.gql │ │ │ │ ├── Category.gql │ │ │ │ ├── Config.gql │ │ │ │ ├── Draft.gql │ │ │ │ ├── Drafts.gql │ │ │ │ ├── Edit.gql │ │ │ │ ├── EditUpdate.gql │ │ │ │ ├── Edits.gql │ │ │ │ ├── FullPerformer.gql │ │ │ │ ├── Me.gql │ │ │ │ ├── ModAudits.gql │ │ │ │ ├── PendingEditsCount.gql │ │ │ │ ├── Performer.gql │ │ │ │ ├── Performers.gql │ │ │ │ ├── PublicUser.gql │ │ │ │ ├── QueryExistingPerformer.gql │ │ │ │ ├── QueryExistingScene.gql │ │ │ │ ├── QueryNotifications.gql │ │ │ │ ├── Scene.gql │ │ │ │ ├── ScenePairings.gql │ │ │ │ ├── Scenes.gql │ │ │ │ ├── ScenesWithFingerprints.gql │ │ │ │ ├── ScenesWithoutCount.gql │ │ │ │ ├── SearchAll.gql │ │ │ │ ├── SearchPerformers.gql │ │ │ │ ├── SearchScenes.gql │ │ │ │ ├── SearchTags.gql │ │ │ │ ├── Site.gql │ │ │ │ ├── Sites.gql │ │ │ │ ├── Studio.gql │ │ │ │ ├── StudioPerformers.gql │ │ │ │ ├── Studios.gql │ │ │ │ ├── SubStudios.gql │ │ │ │ ├── Tag.gql │ │ │ │ ├── Tags.gql │ │ │ │ ├── UnreadNotificationCount.gql │ │ │ │ ├── User.gql │ │ │ │ ├── Users.gql │ │ │ │ ├── Version.gql │ │ │ │ └── index.ts │ │ │ ├── scalars.d.ts │ │ │ └── types.ts │ │ ├── hooks/ │ │ │ ├── index.ts │ │ │ ├── toast.scss │ │ │ ├── useAuth.tsx │ │ │ ├── useBeforeUnload.ts │ │ │ ├── useCurrentUser.tsx │ │ │ ├── useEditFilter.tsx │ │ │ ├── usePagination.ts │ │ │ ├── useQueryParams.ts │ │ │ └── useToast.tsx │ │ ├── index.tsx │ │ ├── modules.d.ts │ │ ├── pages/ │ │ │ ├── activateUser/ │ │ │ │ ├── ActivateUser.tsx │ │ │ │ └── index.ts │ │ │ ├── audits/ │ │ │ │ ├── AmendmentAuditDetails.tsx │ │ │ │ ├── AuditRow.tsx │ │ │ │ ├── Audits.tsx │ │ │ │ ├── DeleteAuditDetails.tsx │ │ │ │ └── index.tsx │ │ │ ├── categories/ │ │ │ │ ├── Categories.tsx │ │ │ │ ├── Category.tsx │ │ │ │ ├── CategoryAdd.tsx │ │ │ │ ├── CategoryEdit.tsx │ │ │ │ ├── categoryForm/ │ │ │ │ │ ├── CategoryForm.tsx │ │ │ │ │ └── index.ts │ │ │ │ └── index.tsx │ │ │ ├── drafts/ │ │ │ │ ├── Draft.tsx │ │ │ │ ├── Drafts.tsx │ │ │ │ ├── PerformerDraft.tsx │ │ │ │ ├── SceneDraft.tsx │ │ │ │ ├── index.tsx │ │ │ │ └── parse.ts │ │ │ ├── edits/ │ │ │ │ ├── Edit.tsx │ │ │ │ ├── EditAmend.tsx │ │ │ │ ├── EditAmendForm.tsx │ │ │ │ ├── EditUpdate.tsx │ │ │ │ ├── Edits.tsx │ │ │ │ ├── components/ │ │ │ │ │ ├── DeleteEditModal.tsx │ │ │ │ │ └── UpdateCount.tsx │ │ │ │ └── index.tsx │ │ │ ├── forgotPassword/ │ │ │ │ ├── ForgotPassword.tsx │ │ │ │ └── index.ts │ │ │ ├── home/ │ │ │ │ ├── Home.tsx │ │ │ │ ├── index.ts │ │ │ │ └── styles.scss │ │ │ ├── index.tsx │ │ │ ├── notifications/ │ │ │ │ ├── CommentNotification.tsx │ │ │ │ ├── EditNotification.tsx │ │ │ │ ├── Notification.tsx │ │ │ │ ├── Notifications.tsx │ │ │ │ ├── index.ts │ │ │ │ ├── sceneNotification.tsx │ │ │ │ ├── styles.scss │ │ │ │ └── types.ts │ │ │ ├── performers/ │ │ │ │ ├── Performer.tsx │ │ │ │ ├── PerformerAdd.tsx │ │ │ │ ├── PerformerDelete.tsx │ │ │ │ ├── PerformerEdit.tsx │ │ │ │ ├── PerformerEditUpdate.tsx │ │ │ │ ├── PerformerMerge.tsx │ │ │ │ ├── Performers.tsx │ │ │ │ ├── components/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── performerInfo.tsx │ │ │ │ │ └── scenePairings.tsx │ │ │ │ ├── index.tsx │ │ │ │ ├── performerForm/ │ │ │ │ │ ├── ExistingPerformerAlert.tsx │ │ │ │ │ ├── PerformerForm.tsx │ │ │ │ │ ├── diff.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── schema.ts │ │ │ │ │ └── types.ts │ │ │ │ └── styles.scss │ │ │ ├── registerUser/ │ │ │ │ ├── Register.tsx │ │ │ │ └── index.ts │ │ │ ├── resetPassword/ │ │ │ │ ├── ResetPassword.tsx │ │ │ │ └── index.ts │ │ │ ├── scenes/ │ │ │ │ ├── Scene.tsx │ │ │ │ ├── SceneAdd.tsx │ │ │ │ ├── SceneDelete.tsx │ │ │ │ ├── SceneEdit.tsx │ │ │ │ ├── SceneEditUpdate.tsx │ │ │ │ ├── Scenes.tsx │ │ │ │ ├── components/ │ │ │ │ │ └── fingerprints/ │ │ │ │ │ ├── DeleteFingerprintsModal.tsx │ │ │ │ │ ├── FingerprintTable.tsx │ │ │ │ │ ├── FingerprintTableHeader.tsx │ │ │ │ │ ├── FingerprintTableRow.tsx │ │ │ │ │ ├── MoveFingerprintsModal.tsx │ │ │ │ │ ├── types.ts │ │ │ │ │ ├── useFingerprintOperations.ts │ │ │ │ │ ├── useFingerprintSelection.ts │ │ │ │ │ └── useFingerprintSort.ts │ │ │ │ ├── index.tsx │ │ │ │ ├── sceneForm/ │ │ │ │ │ ├── ExistingSceneAlert.tsx │ │ │ │ │ ├── SceneForm.tsx │ │ │ │ │ ├── diff.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── schema.ts │ │ │ │ │ ├── styles.scss │ │ │ │ │ └── types.ts │ │ │ │ └── styles.scss │ │ │ ├── search/ │ │ │ │ ├── GenderFacet.tsx │ │ │ │ ├── PerformerCard.tsx │ │ │ │ ├── SceneCard.tsx │ │ │ │ ├── SearchAll.tsx │ │ │ │ ├── SearchLayout.tsx │ │ │ │ ├── SearchPerformersTab.tsx │ │ │ │ ├── SearchScenesTab.tsx │ │ │ │ ├── index.tsx │ │ │ │ └── search.scss │ │ │ ├── sites/ │ │ │ │ ├── Site.tsx │ │ │ │ ├── SiteAdd.tsx │ │ │ │ ├── SiteEdit.tsx │ │ │ │ ├── Sites.tsx │ │ │ │ ├── index.tsx │ │ │ │ └── siteForm/ │ │ │ │ ├── SiteForm.tsx │ │ │ │ └── index.ts │ │ │ ├── studios/ │ │ │ │ ├── Studio.tsx │ │ │ │ ├── StudioAdd.tsx │ │ │ │ ├── StudioDelete.tsx │ │ │ │ ├── StudioEdit.tsx │ │ │ │ ├── StudioEditUpdate.tsx │ │ │ │ ├── Studios.tsx │ │ │ │ ├── components/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── studioPerformers.tsx │ │ │ │ │ ├── subStudioList.tsx │ │ │ │ │ └── subStudioPreview.tsx │ │ │ │ ├── index.tsx │ │ │ │ ├── studioForm/ │ │ │ │ │ ├── StudioForm.tsx │ │ │ │ │ ├── diff.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── schema.ts │ │ │ │ │ └── types.ts │ │ │ │ └── styles.scss │ │ │ ├── tags/ │ │ │ │ ├── Tag.tsx │ │ │ │ ├── TagAdd.tsx │ │ │ │ ├── TagDelete.tsx │ │ │ │ ├── TagEdit.tsx │ │ │ │ ├── TagEditUpdate.tsx │ │ │ │ ├── TagMerge.tsx │ │ │ │ ├── Tags.tsx │ │ │ │ ├── index.tsx │ │ │ │ └── tagForm/ │ │ │ │ ├── TagForm.tsx │ │ │ │ ├── diff.ts │ │ │ │ ├── index.ts │ │ │ │ ├── schema.ts │ │ │ │ └── types.ts │ │ │ ├── users/ │ │ │ │ ├── GenerateInviteKeyModal.tsx │ │ │ │ ├── User.tsx │ │ │ │ ├── UserAdd.tsx │ │ │ │ ├── UserConfirmChangeEmail.tsx │ │ │ │ ├── UserEdit.tsx │ │ │ │ ├── UserEditForm.tsx │ │ │ │ ├── UserEdits.tsx │ │ │ │ ├── UserFingerprints.tsx │ │ │ │ ├── UserFingerprintsList/ │ │ │ │ │ ├── UserFingerprint.tsx │ │ │ │ │ ├── UserFingerprintsList.tsx │ │ │ │ │ ├── UserSceneLine.tsx │ │ │ │ │ └── index.ts │ │ │ │ ├── UserForm.tsx │ │ │ │ ├── UserNotificationPreferences.tsx │ │ │ │ ├── UserPassword.tsx │ │ │ │ ├── UserPasswordForm.tsx │ │ │ │ ├── UserValidateChangeEmail.tsx │ │ │ │ ├── Users.tsx │ │ │ │ ├── index.tsx │ │ │ │ └── styles.scss │ │ │ └── version/ │ │ │ ├── Version.tsx │ │ │ └── index.ts │ │ ├── styles/ │ │ │ └── theme.scss │ │ └── utils/ │ │ ├── country.ts │ │ ├── createClient.ts │ │ ├── data.ts │ │ ├── date.ts │ │ ├── diff.ts │ │ ├── edit.ts │ │ ├── enum.ts │ │ ├── general.ts │ │ ├── index.ts │ │ ├── intl.ts │ │ ├── markdown.tsx │ │ ├── route.ts │ │ ├── transforms.ts │ │ ├── url.ts │ │ └── user.ts │ ├── tsconfig.json │ └── vite.config.mjs ├── go.mod ├── go.sum ├── gqlgen.yml ├── graphql/ │ └── schema/ │ ├── schema.graphql │ └── types/ │ ├── config.graphql │ ├── draft.graphql │ ├── edit.graphql │ ├── filter.graphql │ ├── image.graphql │ ├── misc.graphql │ ├── mod_audit.graphql │ ├── notifications.graphql │ ├── performer.graphql │ ├── scene.graphql │ ├── site.graphql │ ├── studio.graphql │ ├── tag.graphql │ ├── user.graphql │ └── version.graphql ├── internal/ │ ├── api/ │ │ ├── context_keys.go │ │ ├── directives.go │ │ ├── draft_integration_test.go │ │ ├── edit_amend_integration_test.go │ │ ├── edit_delete_integration_test.go │ │ ├── edit_integration_test.go │ │ ├── field_test.go │ │ ├── fingerprint_filter.go │ │ ├── graphql_client_test.go │ │ ├── integration_test.go │ │ ├── loaders.go │ │ ├── notification_integration_test.go │ │ ├── performer_edit_integration_test.go │ │ ├── performer_integration_test.go │ │ ├── performer_resolver_integration_test.go │ │ ├── resolver.go │ │ ├── resolver_model_draft.go │ │ ├── resolver_model_edit.go │ │ ├── resolver_model_edit_comment.go │ │ ├── resolver_model_edit_vote.go │ │ ├── resolver_model_image.go │ │ ├── resolver_model_notification.go │ │ ├── resolver_model_performer.go │ │ ├── resolver_model_performer_draft.go │ │ ├── resolver_model_performer_edit.go │ │ ├── resolver_model_scene.go │ │ ├── resolver_model_scene_draft.go │ │ ├── resolver_model_scene_edit.go │ │ ├── resolver_model_site.go │ │ ├── resolver_model_studio.go │ │ ├── resolver_model_studio_edit.go │ │ ├── resolver_model_tag.go │ │ ├── resolver_model_tag_category.go │ │ ├── resolver_model_tag_edit.go │ │ ├── resolver_model_url.go │ │ ├── resolver_model_user.go │ │ ├── resolver_mutation_draft.go │ │ ├── resolver_mutation_edit.go │ │ ├── resolver_mutation_image.go │ │ ├── resolver_mutation_notifications.go │ │ ├── resolver_mutation_performer.go │ │ ├── resolver_mutation_scene.go │ │ ├── resolver_mutation_site.go │ │ ├── resolver_mutation_studio.go │ │ ├── resolver_mutation_tag.go │ │ ├── resolver_mutation_tag_category.go │ │ ├── resolver_mutation_user.go │ │ ├── resolver_query_draft.go │ │ ├── resolver_query_edit.go │ │ ├── resolver_query_mod_audit.go │ │ ├── resolver_query_notifications.go │ │ ├── resolver_query_performer.go │ │ ├── resolver_query_scene.go │ │ ├── resolver_query_site.go │ │ ├── resolver_query_studio.go │ │ ├── resolver_query_tag.go │ │ ├── resolver_query_tag_category.go │ │ ├── resolver_query_user.go │ │ ├── routes_image.go │ │ ├── routes_root.go │ │ ├── scene_edit_integration_test.go │ │ ├── scene_integration_test.go │ │ ├── search_integration_test.go │ │ ├── server.go │ │ ├── session.go │ │ ├── site_integration_test.go │ │ ├── studio_edit_integration_test.go │ │ ├── studio_integration_test.go │ │ ├── tag_category_integration_test.go │ │ ├── tag_edit_integration_test.go │ │ ├── tag_integration_test.go │ │ ├── user_integration_test.go │ │ └── utils.go │ ├── auth/ │ │ └── authorization.go │ ├── autocert/ │ │ └── autocert.go │ ├── config/ │ │ ├── config.go │ │ └── paths.go │ ├── converter/ │ │ ├── converter.go │ │ └── gen/ │ │ ├── extensions.go │ │ ├── generated.go │ │ └── interfaces.go │ ├── cron/ │ │ └── cron.go │ ├── database/ │ │ ├── database.go │ │ ├── migrations/ │ │ │ └── postgres/ │ │ │ ├── 01_initial.down.sql │ │ │ ├── 01_initial.up.sql │ │ │ ├── 02_create_search.down.sql │ │ │ ├── 02_create_search.up.sql │ │ │ ├── 03_misc.up.sql │ │ │ ├── 04_image_tables.up.sql │ │ │ ├── 05_edits.up.sql │ │ │ ├── 06_deletion_and_redirects.up.sql │ │ │ ├── 07_optimization_indexes.up.sql │ │ │ ├── 08_user_invite.up.sql │ │ │ ├── 09_image_data.up.sql │ │ │ ├── 10_tag_categories.up.sql │ │ │ ├── 11_image_constraints.up.sql │ │ │ ├── 12_fix_performer_trigger.up.sql │ │ │ ├── 13_sort_indexes.up.sql │ │ │ ├── 14_phash_distance_search.up.sql │ │ │ ├── 15_scene_fingerprint_submissions.up.sql │ │ │ ├── 16_fix_scene_update_trigger.up.sql │ │ │ ├── 17_edit_votes.up.sql │ │ │ ├── 18_fingerprint_user.up.sql │ │ │ ├── 19_scene_created_index.up.sql │ │ │ ├── 20_edit_constraints.up.sql │ │ │ ├── 21_site_urls.up.sql │ │ │ ├── 22_performer_search_indexes.up.sql │ │ │ ├── 23_favorites.up.sql │ │ │ ├── 24_drafts.up.sql │ │ │ ├── 25_scene_codes.up.sql │ │ │ ├── 26_scene_partial_date.down.sql │ │ │ ├── 26_scene_partial_date.up.sql │ │ │ ├── 27_edit_closed_at.up.sql │ │ │ ├── 28_studio_favorite_index.up.sql │ │ │ ├── 29_scene_edit_fingerprint_index.up.sql │ │ │ ├── 30_edit_bot.up.sql │ │ │ ├── 31_scenes_deleted_idx.up.sql │ │ │ ├── 32_edit_indexes.up.sql │ │ │ ├── 33_invite_key_uses.up.sql │ │ │ ├── 34_fingerprints.up.sql │ │ │ ├── 35_websearch.up.sql │ │ │ ├── 36_drop_unique_invite.up.sql │ │ │ ├── 37_tokens.up.sql │ │ │ ├── 38_scenes_studio_id_index.up.sql │ │ │ ├── 39_edits_updates.up.sql │ │ │ ├── 40_fingerprint_vote.up.sql │ │ │ ├── 41_notifications.up.sql │ │ │ ├── 42_date_columns.up.sql │ │ │ ├── 43_studio_aliases.up.sql │ │ │ ├── 44_performer_death_date.up.sql │ │ │ ├── 45_scene_production_date.up.sql │ │ │ ├── 46_update_default_notifications.up.sql │ │ │ ├── 47_favorite_unique.up.sql │ │ │ ├── 48_fingerprinted_scene_edit_notification.up.sql │ │ │ ├── 49_entity_search_lower_idx.up.sql │ │ │ ├── 50_rename_url_siteid.up.sql │ │ │ ├── 51_scene_deleted_sort_indexes.up.sql │ │ │ ├── 52_fingerprint_hash_bigint.up.sql │ │ │ ├── 53_varchar_to_text.up.sql │ │ │ ├── 54_delete_soft_deleted_aliases.up.sql │ │ │ ├── 55_fix_edit_data_dates.up.sql │ │ │ ├── 56_paradedb_search.up.sql │ │ │ └── 57_mod_audit.up.sql │ │ └── testutil/ │ │ └── testutil.go │ ├── dataloader/ │ │ ├── bodymodificationsloader_gen.go │ │ ├── boolsloader_gen.go │ │ ├── editcommentloader_gen.go │ │ ├── editloader_gen.go │ │ ├── fingerprintsloader_gen.go │ │ ├── imageloader_gen.go │ │ ├── loaders.go │ │ ├── performerloader_gen.go │ │ ├── sceneappearancesloader_gen.go │ │ ├── sceneloader_gen.go │ │ ├── siteloader_gen.go │ │ ├── stringsloader_gen.go │ │ ├── studioloader_gen.go │ │ ├── submittedfingerprintsloader_gen.go │ │ ├── tagcategoryloader_gen.go │ │ ├── tagloader_gen.go │ │ ├── urlloader_gen.go │ │ └── uuidsloader_gen.go │ ├── email/ │ │ ├── manager.go │ │ ├── templates/ │ │ │ ├── email.html │ │ │ └── email.txt │ │ └── user.go │ ├── image/ │ │ ├── cache/ │ │ │ └── cache.go │ │ ├── resize_unix.go │ │ ├── resize_windows.go │ │ └── sort.go │ ├── models/ │ │ ├── assign/ │ │ │ └── assign.go │ │ ├── extension_criterion_input.go │ │ ├── extension_edit_details.go │ │ ├── extension_edit_details_test.go │ │ ├── extension_role_enum.go │ │ ├── generate.go │ │ ├── generated_exec.go │ │ ├── generated_models.go │ │ ├── model_draft.go │ │ ├── model_edit.go │ │ ├── model_image.go │ │ ├── model_invite_key.go │ │ ├── model_mod_audit.go │ │ ├── model_notification.go │ │ ├── model_performer.go │ │ ├── model_scene.go │ │ ├── model_site.go │ │ ├── model_studio.go │ │ ├── model_tag.go │ │ ├── model_tag_category.go │ │ ├── model_user.go │ │ ├── model_user_tokens.go │ │ ├── scalars.go │ │ ├── translate.go │ │ ├── url.go │ │ └── validator/ │ │ └── validator.go │ ├── queries/ │ │ ├── copyfrom.go │ │ ├── db.go │ │ ├── draft.sql.go │ │ ├── edit.sql.go │ │ ├── fingerprint.sql.go │ │ ├── helpers.go │ │ ├── image.sql.go │ │ ├── invite_key.sql.go │ │ ├── mod_audit.sql.go │ │ ├── models.go │ │ ├── notification.sql.go │ │ ├── performer.sql.go │ │ ├── querier.go │ │ ├── scene.sql.go │ │ ├── site.sql.go │ │ ├── sql/ │ │ │ ├── draft.sql │ │ │ ├── edit.sql │ │ │ ├── fingerprint.sql │ │ │ ├── image.sql │ │ │ ├── invite_key.sql │ │ │ ├── mod_audit.sql │ │ │ ├── notification.sql │ │ │ ├── performer.sql │ │ │ ├── scene.sql │ │ │ ├── site.sql │ │ │ ├── studio.sql │ │ │ ├── tag.sql │ │ │ ├── tag_category.sql │ │ │ ├── user.sql │ │ │ └── user_token.sql │ │ ├── studio.sql.go │ │ ├── tag.sql.go │ │ ├── tag_category.sql.go │ │ ├── types.go │ │ ├── user.sql.go │ │ └── user_token.sql.go │ ├── service/ │ │ ├── draft/ │ │ │ └── service.go │ │ ├── edit/ │ │ │ ├── edit.go │ │ │ ├── modbot.go │ │ │ ├── performer.go │ │ │ ├── query.go │ │ │ ├── scene.go │ │ │ ├── service.go │ │ │ ├── studio.go │ │ │ ├── tag.go │ │ │ └── validate.go │ │ ├── errutil/ │ │ │ └── errors.go │ │ ├── factory.go │ │ ├── image/ │ │ │ ├── service.go │ │ │ └── utils.go │ │ ├── interface.go │ │ ├── invite/ │ │ │ └── service.go │ │ ├── mod_audit/ │ │ │ └── mod_audit.go │ │ ├── notification/ │ │ │ └── service.go │ │ ├── performer/ │ │ │ ├── joins.go │ │ │ ├── query.go │ │ │ └── service.go │ │ ├── query/ │ │ │ ├── criterion.go │ │ │ └── helpers.go │ │ ├── scene/ │ │ │ ├── query.go │ │ │ └── service.go │ │ ├── site/ │ │ │ ├── query.go │ │ │ └── service.go │ │ ├── studio/ │ │ │ ├── query.go │ │ │ └── service.go │ │ ├── tag/ │ │ │ ├── query.go │ │ │ └── service.go │ │ ├── user/ │ │ │ ├── activation.go │ │ │ ├── apikey.go │ │ │ ├── invite.go │ │ │ ├── joins.go │ │ │ ├── password.go │ │ │ ├── query.go │ │ │ ├── service.go │ │ │ ├── token.go │ │ │ ├── user.go │ │ │ └── validate.go │ │ └── usertoken/ │ │ └── service.go │ └── storage/ │ ├── favicon.go │ ├── file.go │ ├── image_backend.go │ └── s3.go ├── pkg/ │ ├── logger/ │ │ ├── logger.go │ │ ├── otel.go │ │ └── progress_formatter.go │ └── utils/ │ ├── arguments.go │ ├── crypto.go │ ├── date.go │ ├── enum.go │ ├── file.go │ ├── json.go │ ├── password_blacklist.go │ ├── slice_compare.go │ └── slice_compare_test.go ├── scripts/ │ └── getDate.go └── sqlc.yaml