diff --git a/.github/workflows/TestAndCompile.yml b/.github/workflows/TestAndCompile.yml index bf687e5..a4951cb 100644 --- a/.github/workflows/TestAndCompile.yml +++ b/.github/workflows/TestAndCompile.yml @@ -2,27 +2,20 @@ name: GraalVM Native Image Test run and build tests on: [pull_request, workflow_dispatch] jobs: build: - name: test and compile on ${{ matrix.os }} + name: test and compile on self-hosted runs-on: self-hosted -# runs-on: ${{ matrix.os }} -# strategy: -# matrix: -# os: [macos-latest, windows-latest, ubuntu-latest] env: - TEST_TOKEN: ${{ secrets.MICRONAUT_HTTP_SERVICES_JUSTSERVE_TOKEN }} + JUSTSERVE_TOKEN: ${{ secrets.MICRONAUT_HTTP_SERVICES_JUSTSERVE_TOKEN }} + JAVA_HOME: ${{ secrets.JAVA_HOME }} + steps: - uses: actions/checkout@v4 - - uses: graalvm/setup-graalvm@v1 - with: - java-version: '21' - distribution: 'graalvm' - github-token: ${{ secrets.GITHUB_TOKEN }} - native-image-job-reports: 'true' - - name: call gradle to run tests and then compile - run: ./gradlew test nativeCompile + - name: Run core tests + run: ./gradlew :core:test + - name: Run cli tests and compile + run: ./gradlew :cli:test :cli:nativeCompile - name: upload binary uses: actions/upload-artifact@v4 with: -# name: justserve-${{ matrix.os }} name: justserve - path: build/native/nativeCompile/justserve* \ No newline at end of file + path: cli/build/native/nativeCompile/justserve* \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..1133129 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "java.configuration.updateBuildConfiguration": "automatic" +} \ No newline at end of file diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index af8cd1e..339e76e 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -16,16 +16,16 @@ Prerequisites: clone the codebase, then cd into the repo and install the dependencies with gradle ```sh -git clone git@github.com:JustServe-Resources/cli.git +git clone git@github.com:JustServe-Resources/devkit.git ./gradlew assemble ``` ## Branch off of main -It's a good practice not to put your changes in the main branch. Branch naming conventions aren't enforced, naming my branches with a `tag`/`task` convention are suggested, similar to [Conventional Commits] naming strategy. +Don't make any changes to the main branch - these will be denied even if you try to. Branch naming conventions aren't enforced, though naming branches with a `my-last-name`/`task-name` convention isn't a bad idea. -See our [style guide](https://github.com/Graqr#general-styling-guide) for supported coding practices. This project enforces [Conventional Commits], which is checked with each commit. +Most importantly, see our [style guide](https://github.com/Graqr#general-styling-guide) for our coding standards. This project enforces [Conventional Commits], which is checked with each commit. ## Test your change Adequate acceptance testing is to be included with pull requests for new code. See our [style guide] for our testing standards. A portion of the codebase is generated during the build process. Using gradle's `build` task will both assemble and run tests. @@ -35,12 +35,13 @@ Adequate acceptance testing is to be included with pull requests for new code. S ``` ## Validate this builds properly -This project compiles to a native executable specific to your OS. This is different from a normal java build process. Compiling this repo into an executable is not a short process. See [graal's docs] for options like quick build mode +This Micronaut application supports AOT (Ahead-of-Time) compilation to a GraalVM Native Image. This process produces a platform-specific binary with instant startup and lower memory overhead, though the compilation itself is resource-intensive. See [graal's docs] for optimization flags like quick build mode. +Running the test suite prior to the native build allows GraalVM to leverage profile-guided data for a more performant executable. ```sh -./gradlew nativeCompile +./gradlew :cli:test :cli:nativeCompile ``` > [!NOTE] -> This build may pass on your OS but may fail on the other OS for which this cli compiles. These will be built and tested during PR checks +> This build may pass on your OS but may fail on another OS for which this cli compiles. These will be built and tested during PR checks ## Submit a pull request diff --git a/README.md b/README.md index 05cce52..9d24d92 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,22 @@ -## JustServe Cli Tool +# JustServe Resources -The JustServe Cli tool is an admin tool for JustServe Specialists and administrators. +[![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=JustServe-Resources_cli&metric=alert_status)](https://sonarcloud.io/summary/new_code?id=JustServe-Resources_cli) +[![Coverage](https://sonarcloud.io/api/project_badges/measure?project=JustServe-Resources_cli&metric=coverage)](https://sonarcloud.io/summary/new_code?id=JustServe-Resources_cli) +[![Duplicated Lines (%)](https://sonarcloud.io/api/project_badges/measure?project=JustServe-Resources_cli&metric=duplicated_lines_density)](https://sonarcloud.io/summary/new_code?id=JustServe-Resources_cli) +[![Bugs](https://sonarcloud.io/api/project_badges/measure?project=JustServe-Resources_cli&metric=bugs)](https://sonarcloud.io/summary/new_code?id=JustServe-Resources_cli) +[![Code Smells](https://sonarcloud.io/api/project_badges/measure?project=JustServe-Resources_cli&metric=code_smells)](https://sonarcloud.io/summary/new_code?id=JustServe-Resources_cli) +[![Vulnerabilities](https://sonarcloud.io/api/project_badges/measure?project=JustServe-Resources_cli&metric=vulnerabilities)](https://sonarcloud.io/summary/new_code?id=JustServe-Resources_cli) +[![Maintainability Rating](https://sonarcloud.io/api/project_badges/measure?project=JustServe-Resources_cli&metric=sqale_rating)](https://sonarcloud.io/summary/new_code?id=JustServe-Resources_cli) +[![Security Rating](https://sonarcloud.io/api/project_badges/measure?project=JustServe-Resources_cli&metric=security_rating)](https://sonarcloud.io/summary/new_code?id=JustServe-Resources_cli) -This tool is very much under development and whose api is subject to change with each release. Standard versioning is used for this project to delineate breaking releases. +This repository is architected as a modular, multi-module Micronaut project. At its center is the `core` module, a +reusable library providing a thoroughly tested HTTP client for the JustServe API. + +Other modules leverage the `core` library to build specific applications. The `cli` module, for instance, is a GraalVM native command-line application that consumes the `core` client to provide administrative tooling. + +As the project evolves, we adhere to semantic versioning. The API is subject to change, and any breaking modifications will be clearly communicated through major version increments. + +## Cli Tool ### Install @@ -37,7 +51,7 @@ echo $env:java_home -To generate the executable for your system, run `./gradlew nativeCompile`. The executable will be generated in the build directory (`\build\native\nativeCompile\`). +To generate the executable for your system, run `./gradlew :cli:nativeCompile`. The executable will be generated in the build directory (`cli/build/native/nativeCompile/`). ### Authenticate diff --git a/STYLE_GUIDE.md b/STYLE_GUIDE.md index 3cf53c2..09082f5 100644 --- a/STYLE_GUIDE.md +++ b/STYLE_GUIDE.md @@ -33,15 +33,39 @@ The name of the game is readability and [testability]. The following styling spe ### Testing +- Tests should never run against production. +- Use your development environment's auth token assigned to the `JUSTSERVE_TOKEN` environment variable in tests. - Methods and Features are to have [adequate] unit and integration tests written before any pull request can be accepted. - Because we use lombok, we don't need to test setters and getters. Using getters and setters is the preferred way to access class fields. - Unit test count is to scale appropriately according to the complexity of the method. - Features are to have [adequate] integration and end-to-end tests. - Fixes are to have [adequate] unit, integration and end-to-end tests included with the fix for the sake of [regression testing]. - Tests should only test one thing - - e.g. `Set store location with zip code.` - - e.g. `Fail to set store location using invalid zip code` - - e.g. `Set store location by city name` + - e.g. `Set project owner.` + - e.g. `Can NOT to set project owner with invalid UUID` + - e.g. `Can update an Org description` +- Use data-driven testing to validate logic across all permutations of documented behavior like all `EventType` variants below. + ```groovy + @Unroll("can set contact info for #eventType.name() event") + def "can set contact info for #eventType event"() { + given: + def event = baseEventBuilder() + .contactEmail(faker.internet().emailAddress()) + .contactName(faker.name().fullName()) + .contactPhone(faker.phoneNumber().phoneNumber()) + .build() + def vars = new CreateEventVariables().setProjectId(projectIds[eventType]).setProjectEvent(event) + + when: + client.createEvent(new CreateEventMutation(vars)) + + then: + noExceptionThrown() + + where: + eventType << [EventType.DTL, EventType.Ongoing, EventType.MultipleDTL] + } + ``` #### Adequate Testing Coverage Adequate testing is determined by the method's documentation (this is why all methods require docs). Testing is surgical and specific; test exactly what is documented, no more and no less. If it's in the docs, then [test it]! The only exception to this is that [branches of code] should be covered in testing, which may not be documented. diff --git a/build.gradle.kts b/build.gradle.kts index 69182a2..6dd2f7c 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,93 +1,10 @@ -import org.apache.tools.ant.filters.ReplaceTokens -import java.util.* - plugins { - id("groovy") - id("io.micronaut.application") version "4.5.3" - id("com.gradleup.shadow") version "8.3.6" - id("io.micronaut.openapi") version "4.5.3" - id("org.graalvm.buildtools.native") version "0.10.6" - id("org.asciidoctor.jvm.convert") version "3.3.2" -} - -version = project.properties["justserveCliVersion"]!! -group = "org.justserve" - -apply(from = "gradle/asciidoc.gradle") - -repositories { - mavenCentral() -} - -dependencies { - annotationProcessor("org.projectlombok:lombok") - annotationProcessor("info.picocli:picocli-codegen") - annotationProcessor("io.micronaut.serde:micronaut-serde-processor") - implementation("info.picocli:picocli") - implementation("info.picocli:picocli-jansi-graalvm:1.2.0") - implementation("org.fusesource.jansi:jansi:2.4.2") - implementation("info.picocli:picocli-shell-jline3:4.7.6") - implementation("org.jline:jline:3.30.5") - implementation("io.micronaut:micronaut-http-client") - implementation("io.micronaut.picocli:micronaut-picocli") - implementation("io.micronaut.serde:micronaut-serde-jackson") - implementation("io.micronaut:micronaut-retry") - implementation("org.simplejavamail:simple-java-mail:8.12.6") - implementation("org.jsoup:jsoup:1.21.2") - testImplementation("net.datafaker:datafaker:2.5.1") - compileOnly("org.projectlombok:lombok") - runtimeOnly("ch.qos.logback:logback-classic") - runtimeOnly("org.yaml:snakeyaml") -} - - -application { - mainClass = "org.justserve.cli.JustServeCommand" -} - -java { - sourceCompatibility = JavaVersion.toVersion("21") - targetCompatibility = JavaVersion.toVersion("21") -} - -tasks.withType { - val props = Properties() - file("gradle.properties").inputStream().use { props.load(it) } - filesMatching("**/application.yml") { - filter(mapOf("tokens" to props), ReplaceTokens::class.java) - } -} - -micronaut { - testRuntime("spock2") - openapi { - version = "6.16.0" - client(file("src/main/resources/schema.yml")) { - apiPackageName = "org.justserve.client" - modelPackageName = "org.justserve.model" - useReactive = false - useAuth = false - lombok.set(true) - clientId = "justserve" - apiNameSuffix = "Client" - alwaysUseGenerateHttpResponse = true - } - } - processing { - incremental(true) - annotations("org.justserve.*") - } -} - -graalvmNative.binaries { - named("main") { - imageName.set("justserve") - buildArgs.add("--color=always") - buildArgs.add("-march=native") - } -} - - -tasks.named("dockerfileNative") { - jdkVersion = "21" + id("it.nicolasfarabegoli.conventional-commits") version "3.1.3" + id("io.micronaut.application") version "4.6.2" apply false + id("io.micronaut.library") version "4.5.3" apply false + id("io.micronaut.openapi") version "4.5.3" apply false + id("io.micronaut.aot") version "4.6.2" apply false + id("com.gradleup.shadow") version "8.3.9" apply false + id("org.graalvm.buildtools.native") version "0.10.6" apply false + id("com.github.hauner.jarTest") version "1.1.0" apply false } diff --git a/cli/build.gradle.kts b/cli/build.gradle.kts new file mode 100644 index 0000000..46ba51e --- /dev/null +++ b/cli/build.gradle.kts @@ -0,0 +1,78 @@ +import org.apache.tools.ant.filters.ReplaceTokens +import java.util.* + +plugins { + id("groovy") + id("io.micronaut.application") + id("com.gradleup.shadow") + id("org.graalvm.buildtools.native") +} + +group = "org.justserve" +version = project.properties["justserveCliVersion"]!! + +repositories { + mavenCentral() +} + +dependencies { + annotationProcessor("org.projectlombok:lombok") + annotationProcessor("info.picocli:picocli-codegen") + annotationProcessor("io.micronaut.serde:micronaut-serde-processor") + annotationProcessor("io.micronaut.validation:micronaut-validation") + implementation("io.micronaut.validation:micronaut-validation") + implementation("io.micronaut.reactor:micronaut-reactor") + implementation("info.picocli:picocli") + implementation("info.picocli:picocli-jansi-graalvm:${project.properties["jansiGraalvmVersion"]}") + implementation("org.fusesource.jansi:jansi:${project.properties["jansiVersion"]}") + implementation("info.picocli:picocli-shell-jline3:${project.properties["picocliShellVersion"]}") + implementation("org.jline:jline:${project.properties["jlineVersion"]}") + implementation("io.micronaut.picocli:micronaut-picocli") + implementation("org.simplejavamail:simple-java-mail:${project.properties["simpleJavaMailVersion"]}") + implementation("io.micronaut.serde:micronaut-serde-jackson") + implementation("io.micronaut:micronaut-http-client") + implementation("org.jsoup:jsoup:${project.properties["jsoupVersion"]}") + implementation(project(":core")) + testImplementation("net.datafaker:datafaker:${project.properties["datafakerVersion"]}") + testImplementation("org.apache.commons:commons-lang3:${project.properties["commonsLangVersion"]}") + testImplementation(project(path = ":core", configuration = "testArchives")) + compileOnly("org.projectlombok:lombok") + runtimeOnly("ch.qos.logback:logback-classic") + runtimeOnly("org.yaml:snakeyaml") +} + + +application { + mainClass = "org.justserve.JustServeCommand" +} +java { + sourceCompatibility = JavaVersion.toVersion("21") + targetCompatibility = JavaVersion.toVersion("21") +} + +tasks.withType { + val props = Properties() + file("../gradle.properties").inputStream().use { props.load(it) } + filesMatching("**/application.yml") { + filter(mapOf("tokens" to props), ReplaceTokens::class.java) + } +} + +micronaut { + testRuntime("spock2") + processing { + incremental(true) + annotations("org.justserve.*") + } +} + +tasks.named("dockerfileNative") { + jdkVersion = "21" +} + +graalvmNative.binaries { + named("main") { + imageName.set("justserve") + buildArgs.add("--color=always") + } +} diff --git a/src/main/java/org/justserve/cli/JustServeCommand.java b/cli/src/main/java/org/justserve/JustServeCommand.java similarity index 73% rename from src/main/java/org/justserve/cli/JustServeCommand.java rename to cli/src/main/java/org/justserve/JustServeCommand.java index 4bb71a2..62a5f23 100644 --- a/src/main/java/org/justserve/cli/JustServeCommand.java +++ b/cli/src/main/java/org/justserve/JustServeCommand.java @@ -1,16 +1,13 @@ -package org.justserve.cli; +package org.justserve; import io.micronaut.configuration.picocli.PicocliRunner; -import org.justserve.cli.command.BaseCommand; -import org.justserve.cli.command.GetTempPassword; -import org.justserve.cli.command.MakeOrgAdmin; -import org.justserve.cli.command.UnReassignProjects; -import org.justserve.cli.util.JustServeVersionProvider; +import org.justserve.command.*; +import org.justserve.util.JustServeVersionProvider; import picocli.CommandLine.Command; import picocli.CommandLine.ParameterException; import picocli.jansi.graalvm.AnsiConsole; -@Command(subcommands = {GetTempPassword.class, MakeOrgAdmin.class, UnReassignProjects.class}, +@Command(subcommands = {GetTempPassword.class, MakeOrgAdmin.class, UnReassignProjects.class, AssignOrgToProject.class}, mixinStandardHelpOptions = true, name = "justserve", versionProvider = JustServeVersionProvider.class, description = "justserve-cli is a terminal tool to help specialists and admin using JustServe") diff --git a/cli/src/main/java/org/justserve/command/AssignOrgToProject.java b/cli/src/main/java/org/justserve/command/AssignOrgToProject.java new file mode 100644 index 0000000..89d09f0 --- /dev/null +++ b/cli/src/main/java/org/justserve/command/AssignOrgToProject.java @@ -0,0 +1,49 @@ +package org.justserve.command; + +import io.micronaut.http.client.exceptions.HttpClientResponseException; +import jakarta.inject.Inject; +import jakarta.inject.Provider; +import lombok.extern.slf4j.Slf4j; +import org.justserve.client.ProjectClient; +import picocli.CommandLine.Command; +import picocli.CommandLine.Option; + +import java.util.UUID; + +import static org.justserve.util.JustServePrinter.printError; +import static org.justserve.util.JustServePrinter.printNormal; + + +@Slf4j +@Command(name = "assignOrgToProject", description = "Assigns an organization to a project", mixinStandardHelpOptions = true) +public class AssignOrgToProject extends BaseCommand implements Runnable { + + @Option(names = {"--project", "-p"}, description = "the project ID", required = true) + private UUID projectId; + + @Option(names = {"--org", "-o"}, description = "the organization ID", required = true) + private UUID orgId; + + @Inject + Provider projectClientProvider; + + @Override + public void run() { + if (isTokenInvalid()) { + return; + } + + ProjectClient client = projectClientProvider.get(); + + try { + log.atTrace().log("Assigning organization {} to project {}", orgId, projectId); + client.assignOrganizationToProject(projectId, orgId).block(); + printNormal("Successfully assigned organization %s to project %s", orgId, projectId); + log.atTrace().log("Successfully assigned organization to project"); + } catch (HttpClientResponseException e) { + printError("Failed to assign organization %s to project %s. (%s: %s)", + orgId, projectId, e.getStatus().getCode(), e.getMessage()); + log.atError().setCause(e).log("Error response from API: {}", e.getResponse().body()); + } + } +} diff --git a/src/main/java/org/justserve/cli/command/BaseCommand.java b/cli/src/main/java/org/justserve/command/BaseCommand.java similarity index 95% rename from src/main/java/org/justserve/cli/command/BaseCommand.java rename to cli/src/main/java/org/justserve/command/BaseCommand.java index 61451ee..04a1658 100644 --- a/src/main/java/org/justserve/cli/command/BaseCommand.java +++ b/cli/src/main/java/org/justserve/command/BaseCommand.java @@ -1,4 +1,4 @@ -package org.justserve.cli.command; +package org.justserve.command; import io.micronaut.context.annotation.Value; import io.micronaut.core.annotation.NonNull; @@ -10,7 +10,7 @@ import java.io.PrintWriter; import java.util.Optional; -import static org.justserve.cli.util.JustServePrinter.printError; +import static org.justserve.util.JustServePrinter.printError; import static picocli.CommandLine.Help.Ansi.AUTO; @Command @@ -24,7 +24,7 @@ public class BaseCommand implements ConsoleOutput { String token; boolean isTokenInvalid() { - if ("i-need-to-be-defined".equals(token) || null == token) { + if ("i-need-to-be-defined".equals(token) || null == token || token.isEmpty()) { printError(("NO AUTHENTICATION PROVIDED" + System.lineSeparator() + "The Authentication token is not assigned as an environment variable." + System.lineSeparator() + "Please define the environment variable \"JUSTSERVE_TOKEN\" and try again.")); diff --git a/src/main/java/org/justserve/cli/command/CommonOptionsMixin.java b/cli/src/main/java/org/justserve/command/CommonOptionsMixin.java similarity index 82% rename from src/main/java/org/justserve/cli/command/CommonOptionsMixin.java rename to cli/src/main/java/org/justserve/command/CommonOptionsMixin.java index ce4a634..b3c929d 100644 --- a/src/main/java/org/justserve/cli/command/CommonOptionsMixin.java +++ b/cli/src/main/java/org/justserve/command/CommonOptionsMixin.java @@ -1,7 +1,6 @@ -package org.justserve.cli.command; +package org.justserve.command; import io.micronaut.core.annotation.ReflectiveAccess; -import org.justserve.cli.util.JustServeVersionProvider; import picocli.CommandLine.Command; import picocli.CommandLine.Option; @@ -20,7 +19,7 @@ * @author Jonathan Zollinger * @version 0.0.1 */ -@Command(mixinStandardHelpOptions = true, versionProvider = JustServeVersionProvider.class) +@Command(mixinStandardHelpOptions = true, versionProvider = org.justserve.util.JustServeVersionProvider.class) @SuppressWarnings("checkstyle:VisibilityModifier") public class CommonOptionsMixin { diff --git a/cli/src/main/java/org/justserve/command/ConsoleOutput.java b/cli/src/main/java/org/justserve/command/ConsoleOutput.java new file mode 100644 index 0000000..66c96e6 --- /dev/null +++ b/cli/src/main/java/org/justserve/command/ConsoleOutput.java @@ -0,0 +1,22 @@ +package org.justserve.command; + +public interface ConsoleOutput { + + void out(String message); + + void err(String message); + + void warning(String message); + + boolean showStacktrace(); + + boolean verbose(); + + default void green(String message) { + out(message); + } + + default void red(String message) { + out(message); + } +} diff --git a/src/main/java/org/justserve/cli/command/GetTempPassword.java b/cli/src/main/java/org/justserve/command/GetTempPassword.java similarity index 80% rename from src/main/java/org/justserve/cli/command/GetTempPassword.java rename to cli/src/main/java/org/justserve/command/GetTempPassword.java index 72d9fea..c2084bf 100644 --- a/src/main/java/org/justserve/cli/command/GetTempPassword.java +++ b/cli/src/main/java/org/justserve/command/GetTempPassword.java @@ -1,6 +1,5 @@ -package org.justserve.cli.command; +package org.justserve.command; -import io.micronaut.http.HttpResponse; import io.micronaut.http.client.exceptions.HttpClientResponseException; import jakarta.inject.Inject; import jakarta.inject.Provider; @@ -10,12 +9,13 @@ import picocli.CommandLine.Command; import picocli.CommandLine.Option; -import static org.justserve.cli.util.JustServePrinter.printError; -import static org.justserve.cli.util.JustServePrinter.printNormal; +import static org.justserve.util.JustServePrinter.printError; +import static org.justserve.util.JustServePrinter.printNormal; @Command(name = "getTempPassword", description = "get a temporary password for a user") public class GetTempPassword extends BaseCommand implements Runnable { + @Email @Option(names = {"-e", "--email"}, description = "email for the user whose temporary password will be generated") String email; @@ -29,10 +29,10 @@ public void run() { if (isTokenInvalid()) { return; } - HttpResponse response; + String response; try { UserClient userClient = userClientProvider.get(); - response = userClient.getTempPassword(new UserHashRequestByEmail(email)); + response = userClient.getTempPassword(new UserHashRequestByEmail(email)).block(); } catch (HttpClientResponseException e) { String errorMessage = "Received an unexpected response from JustServe:" + String.format("%n%d (%s)", e.getResponse().status().getCode(), e.reason()); @@ -40,7 +40,7 @@ public void run() { return; } if (response != null) { - printNormal(response.body().replace("\"", "").trim()); + printNormal(response.replace("\"", "").trim()); } else { printError("An unexpected error occurred. Response from JustServe was null."); } diff --git a/src/main/java/org/justserve/cli/command/MakeOrgAdmin.java b/cli/src/main/java/org/justserve/command/MakeOrgAdmin.java similarity index 70% rename from src/main/java/org/justserve/cli/command/MakeOrgAdmin.java rename to cli/src/main/java/org/justserve/command/MakeOrgAdmin.java index d9f382a..71eb846 100644 --- a/src/main/java/org/justserve/cli/command/MakeOrgAdmin.java +++ b/cli/src/main/java/org/justserve/command/MakeOrgAdmin.java @@ -1,7 +1,6 @@ -package org.justserve.cli.command; +package org.justserve.command; import io.micronaut.core.annotation.Nullable; -import io.micronaut.http.HttpResponse; import io.micronaut.http.client.exceptions.HttpClientResponseException; import jakarta.inject.Inject; import jakarta.inject.Provider; @@ -10,6 +9,7 @@ import lombok.extern.slf4j.Slf4j; import org.justserve.client.BoundaryPermissionClient; import org.justserve.client.DynamicRoutingClient; +import org.justserve.model.DynamicRoutingDataResponse; import picocli.CommandLine; import picocli.CommandLine.Command; import picocli.CommandLine.Option; @@ -17,8 +17,8 @@ import java.util.*; import java.util.stream.Collectors; -import static org.justserve.cli.util.JustServePrinter.printError; -import static org.justserve.cli.util.JustServePrinter.printNormal; +import static org.justserve.util.JustServePrinter.printError; +import static org.justserve.util.JustServePrinter.printNormal; @Slf4j @Command(name = "makeOrgAdmin", description = "make a user an admin for the provided organization(s). " + @@ -45,37 +45,37 @@ public void run() { } DynamicRoutingClient dynamicRoutingClient = dynamicRoutingClientProvider.get(); // since we allow submitting orgId's and orgUrl, convert any slugs to orgId's - Map orgUuidMap = Arrays.stream(orgs).distinct().parallel() - .collect(Collectors.toMap( - org -> org, - org -> org instanceof OrgId ? ((OrgId) org).getId() : dynamicRoutingClient - .getOrgIdFromSlug(((OrgSlug) org).getSlug()).body().getId() - )); - if (orgUuidMap.values().stream().anyMatch(Objects::isNull)) { - // provide a list of all invalid org slugs, not just the first failure - List invalidOrgSlugs = new ArrayList<>(); - orgUuidMap.entrySet().stream() - .filter(entry -> entry.getValue() == null) - .map(entry -> (OrgSlug) entry.getKey()) - .forEach(invalidOrgSlugs::add); - printError("The following organization slugs are invalid: " + invalidOrgSlugs.stream() - .map(OrgSlug::getSlug) - .collect(Collectors.joining(", "))); - return; - } + Map orgUuidMap = Arrays.stream(orgs).distinct().parallel() + .map(org -> { + if (org instanceof OrgId orgId) { + return new AbstractMap.SimpleEntry<>(org, orgId.getId()); + } + DynamicRoutingDataResponse response; + try { + response = dynamicRoutingClient.getOrgIdFromSlug(((OrgSlug) org).getSlug()).block(); + assert response != null; + return new AbstractMap.SimpleEntry<>(org, response.getId()); + } catch (HttpClientResponseException | NullPointerException noOrgFound) { + err(String.format("The org '%s' is not found on JustServe", ((OrgSlug) org).getSlug())); + return null; + } + + }) + .filter(Objects::nonNull) + .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); + log.atTrace().log("Finished converting any slugs to org id's."); BoundaryPermissionClient boundaryPermissionClient = boundaryPermissionClientProvider.get(); Map successfulReassignments = new HashMap<>(); orgUuidMap.entrySet().stream().parallel().forEach(entry -> { Org org = entry.getKey(); UUID orgId = entry.getValue(); - String orgIdentifier = org instanceof OrgSlug ? ((OrgSlug) org).getSlug() + " (" + orgId + ")" : orgId.toString(); + String orgIdentifier = org instanceof OrgSlug orgSlug ? orgSlug.getSlug() + " (" + orgId + ")" : orgId.toString(); log.atTrace().log("Making user {} an admin for org {}", user, orgIdentifier); try { log.atTrace().log("sending request to make user {} an admin for org {}.", user, orgIdentifier); - HttpResponse response = boundaryPermissionClient.makeAdminForOrg(orgId, user); - log.atTrace().log("received api response status: {}", response.status()); + boundaryPermissionClient.makeAdminForOrg(orgId, user).block(); log.atDebug().log("Successfully made user {} an admin for org {}.", user, orgIdentifier); successfulReassignments.put(org, orgId); } catch (HttpClientResponseException e) { diff --git a/src/main/java/org/justserve/cli/command/UnReassignProjects.java b/cli/src/main/java/org/justserve/command/UnReassignProjects.java similarity index 72% rename from src/main/java/org/justserve/cli/command/UnReassignProjects.java rename to cli/src/main/java/org/justserve/command/UnReassignProjects.java index 5038402..bb28a9f 100644 --- a/src/main/java/org/justserve/cli/command/UnReassignProjects.java +++ b/cli/src/main/java/org/justserve/command/UnReassignProjects.java @@ -1,4 +1,4 @@ -package org.justserve.cli.command; +package org.justserve.command; import io.micronaut.http.HttpResponse; import io.micronaut.http.HttpStatus; @@ -7,12 +7,12 @@ import jakarta.inject.Provider; import jakarta.mail.MessagingException; import lombok.extern.slf4j.Slf4j; -import org.justserve.cli.util.JustServeEmailParserError; import org.justserve.client.ProjectClient; import org.justserve.model.GetProjectRequest; import org.justserve.model.Project; import org.justserve.model.ReassignProjectRequest; import org.justserve.util.EmailParser; +import org.justserve.util.JustServeEmailParserError; import picocli.CommandLine.Command; import picocli.CommandLine.Option; @@ -23,8 +23,8 @@ import java.util.Set; import java.util.UUID; -import static org.justserve.cli.util.JustServePrinter.printError; -import static org.justserve.cli.util.JustServePrinter.printNormal; +import static org.justserve.util.JustServePrinter.printError; +import static org.justserve.util.JustServePrinter.printNormal; @Slf4j @Command(name = "unReassignProjects", description = "Reassigns projects from an email file to a user", mixinStandardHelpOptions = true) @@ -83,13 +83,19 @@ public void run() { for (UUID projectId : projectIds) { GetProjectRequest getProjectRequest = new GetProjectRequest(); Project project; + String failedToGetError = ("Failed to get project '" + projectName + "' (" + projectId + ")"); try { - project = client.getProject(projectId, " ", getProjectRequest).body(); + project = client.getProject(projectId, " ", getProjectRequest).block(); } catch (HttpClientResponseException | NullPointerException e) { - printError("Failed to get project " + projectName + " (" + projectId + ")"); + printError(failedToGetError); log.atError().setCause(e).log("Error getting project"); continue; } + if (null == project) { + printError(failedToGetError); + log.atError().log("Project {} not found", projectId); + continue; + } if (null == project.getProjectOwnerUserId()) { warning(String.format("Project %s (%s) has no owner", projectName, projectId)); log.warn("Project {} ({}) has no owner", projectName, projectId); @@ -99,20 +105,11 @@ public void run() { log.warn("Project {} ({}) is already assigned to user {}", projectName, projectId, userID); continue; } + ReassignProjectRequest reassignProjectRequest = new ReassignProjectRequest(userID, project.getProjectOwnerUserId()); + log.atTrace().log("Reassigning project {} ({}) to user {}", projectName, projectId, userID); try { - ReassignProjectRequest reassignProjectRequest = new ReassignProjectRequest(userID, project.getProjectOwnerUserId()); - log.atTrace().log("Reassigning project {} ({}) to user {}", projectName, projectId, userID); - HttpResponse reassignResponse = client.reassignProject(projectId, reassignProjectRequest); - if (reassignResponse.status() == HttpStatus.OK) { - printNormal("Successfully reassigned project %s (%s) to user %s", projectName, projectId, userID); - log.atTrace().log("received api response status: {}", reassignResponse.status()); - successCount++; - continue; - } - printError("Failed to reassign project " + projectName + " (" + projectId + ") to user " + userID + - ". Expected HTTP Status 'OK', but got " + reassignResponse.status()); - log.atError().log("Failed to reassign project {} ({}) to user {}. Expected HTTP Status 'OK', but got {}", - projectName, projectId, userID, reassignResponse.status()); + client.reassignProject(projectId, reassignProjectRequest).block(); + successCount ++; } catch (HttpClientResponseException e) { printError("Failed to reassign project " + projectName + " (" + projectId + ") to user " + userID); log.atError().setCause(e).log("Error response from API: {}", e.getResponse().body()); diff --git a/src/main/java/org/justserve/util/EmailParser.java b/cli/src/main/java/org/justserve/util/EmailParser.java similarity index 90% rename from src/main/java/org/justserve/util/EmailParser.java rename to cli/src/main/java/org/justserve/util/EmailParser.java index 9688f79..5e9f548 100644 --- a/src/main/java/org/justserve/util/EmailParser.java +++ b/cli/src/main/java/org/justserve/util/EmailParser.java @@ -9,7 +9,6 @@ import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.select.Elements; -import org.justserve.cli.util.JustServeEmailParserError; import java.io.ByteArrayInputStream; import java.io.IOException; @@ -66,7 +65,7 @@ public static Document parse(String emlFileContent) throws MessagingException, I * Extracts project names and their corresponding UUIDs for project ids on JustServe. * The Document is expected to represent an HTML email body from an automated JustServe email regarding reassigned projects * - * @param doc The Jsoup Document containing the HTML structure of the email. + * @param doc The Jsoup Document containing the HTML structure of the email. This is to be the html from the automated email and does not contain any other parts of the email. * @return A map where keys are project names (String) and values are project UUIDs. * @throws JustServeEmailParserError If the HTML structure does not conform to the expected format for extracting projects. */ @@ -161,11 +160,22 @@ private static String getHtmlBody(Part part) throws MessagingException, IOExcept * not contain the 'www.justserve.org*2Fprojects*2F' string. */ static UUID getProjectIDFromUglyUrl(String uglyUrl) { - String start = "www.justserve.org*2Fprojects*2F"; - if (!uglyUrl.contains(start)) { + String startAsterisk = "www.justserve.org*2Fprojects*2F"; + String startPercent = "www.justserve.org%2Fprojects%2F"; + String startSlash = "www.justserve.org/projects/"; + String splitString; + + if (uglyUrl.contains(startAsterisk)) { + splitString = startAsterisk; + } else if (uglyUrl.contains(startPercent)) { + splitString = startPercent; + } else if (uglyUrl.contains(startSlash)) { + splitString = startSlash; + } else { return null; } - String uuid = uglyUrl.split(Pattern.quote(start))[1].split(Pattern.quote("/"))[0]; + + String uuid = uglyUrl.split(Pattern.quote(splitString))[1].split(Pattern.quote("/"))[0]; return UUID.fromString(uuid); } } diff --git a/src/main/java/org/justserve/cli/util/JustServeEmailParserError.java b/cli/src/main/java/org/justserve/util/JustServeEmailParserError.java similarity index 82% rename from src/main/java/org/justserve/cli/util/JustServeEmailParserError.java rename to cli/src/main/java/org/justserve/util/JustServeEmailParserError.java index 66809e6..ea8c7f2 100644 --- a/src/main/java/org/justserve/cli/util/JustServeEmailParserError.java +++ b/cli/src/main/java/org/justserve/util/JustServeEmailParserError.java @@ -1,4 +1,4 @@ -package org.justserve.cli.util; +package org.justserve.util; public class JustServeEmailParserError extends Exception { public JustServeEmailParserError(String message) { diff --git a/src/main/java/org/justserve/cli/util/JustServePrinter.java b/cli/src/main/java/org/justserve/util/JustServePrinter.java similarity index 82% rename from src/main/java/org/justserve/cli/util/JustServePrinter.java rename to cli/src/main/java/org/justserve/util/JustServePrinter.java index 4c1a78f..4289006 100644 --- a/src/main/java/org/justserve/cli/util/JustServePrinter.java +++ b/cli/src/main/java/org/justserve/util/JustServePrinter.java @@ -1,4 +1,4 @@ -package org.justserve.cli.util; +package org.justserve.util; import org.fusesource.jansi.Ansi; @@ -12,17 +12,17 @@ */ public final class JustServePrinter { - private final static Ansi blue = ansi().fgRgb(0, 158, 185); - private final static Ansi orange = ansi().fgRgb(255, 140, 0); // OG color is 239, 94, 57 - private final static Ansi red = ansi().fgRgb(233, 59, 84); // I definitely eyeballed this one - private final static Ansi yellow = ansi().fgRgb(225, 188, 33); - - private final static Ansi normalStyle = ansi().reset(); - private final static Ansi titleStyle = blue.bold(); - private final static Ansi emphasisStyle = orange.bold(); - private final static Ansi warningStyle = yellow; - private final static Ansi errorTitleStyle = red.bold(); - private final static Ansi errorInfoStyle = ansi().reset(); + private static final Ansi blue = ansi().fgRgb(0, 158, 185); + private static final Ansi orange = ansi().fgRgb(255, 140, 0); // OG color is 239, 94, 57 + private static final Ansi red = ansi().fgRgb(233, 59, 84); // I definitely eyeballed this one + private static final Ansi yellow = ansi().fgRgb(225, 188, 33); + + private static final Ansi normalStyle = ansi().reset(); + private static final Ansi titleStyle = blue.bold(); + private static final Ansi emphasisStyle = orange.bold(); + private static final Ansi warningStyle = yellow; + private static final Ansi errorTitleStyle = red.bold(); + private static final Ansi errorInfoStyle = ansi().reset(); /** diff --git a/src/main/java/org/justserve/cli/util/JustServeVersionProvider.java b/cli/src/main/java/org/justserve/util/JustServeVersionProvider.java similarity index 81% rename from src/main/java/org/justserve/cli/util/JustServeVersionProvider.java rename to cli/src/main/java/org/justserve/util/JustServeVersionProvider.java index f67d90a..6d3b4b5 100644 --- a/src/main/java/org/justserve/cli/util/JustServeVersionProvider.java +++ b/cli/src/main/java/org/justserve/util/JustServeVersionProvider.java @@ -1,10 +1,10 @@ -package org.justserve.cli.util; +package org.justserve.util; import io.micronaut.context.annotation.Value; import picocli.CommandLine; -import static org.justserve.cli.util.JustServePrinter.styleEmphasis; -import static org.justserve.cli.util.JustServePrinter.styleTitle; +import static org.justserve.util.JustServePrinter.styleEmphasis; +import static org.justserve.util.JustServePrinter.styleTitle; public class JustServeVersionProvider implements CommandLine.IVersionProvider { diff --git a/cli/src/main/resources/CLICommandNamingConventionStandard.md b/cli/src/main/resources/CLICommandNamingConventionStandard.md new file mode 100644 index 0000000..0a312a4 --- /dev/null +++ b/cli/src/main/resources/CLICommandNamingConventionStandard.md @@ -0,0 +1,104 @@ +# CLI Command Naming Convention Standard +**Noun–Verb–Flags Pattern** + +## Purpose + +This document defines the standard approach for designing CLI commands and flags. The goals are to: + +- Improve **clarity and discoverability** of commands +- Ensure **consistency** across all commands and resources +- Make the CLI **intuitive**, **scalable**, and **future‑proof** +- Reduce cognitive load when learning or extending the CLI + +This standard should be followed for all new CLI commands and when refactoring existing ones. + +--- + +## Core Principles + +### Use the Noun–Verb–Flags Structure + +All commands must follow this structure: +#### Definitions +- **Noun**: The primary resource being acted upon (e.g., `organization`, `project`, `user`) +- **Verb**: The action being performed on that resource (e.g., `assign`, `create`, `remove`) +- **Flags**: Parameters describing *how* or *to whom* the action applies + +#### Why This Works +### - Mirrors natural language (“assign a user to an organization”) +- Scales cleanly as resources and actions grow +- Matches conventions used by mature CLIs (e.g., `kubectl`, `git`) +- Enables easy auto-completion and documentation generation + +--- + +## Example + +### ❌ Non‑Standard / Legacy Command +**Issues** +- Verb-first command is unclear +- Action is tightly coupled to a specific use case +- User identification is inconsistent and limited + +--- + +### ✅ Standardized Command +**Benefits** +- Clearly communicates the resource (`organization`) +- Action (`assign`) is consistent across contexts +- Flags are explicit, flexible, and consistent + +--- + +## Flag Consistency Rules + +### Flags Must Be Consistent Across the Entire CLI + +If a resource or concept appears in multiple commands, it must always use the same flag name and behavior, and accept all existing input variations + +#### User References + +Any flag referring to a user (e.g., `-u`, `--user`) must consistently support every current reference +method, and if you choose to add a new reference method all other commands that use that reference should be updated. + +✅ Example: +If when creating a reassign org command we decide to reference the user by first and last name, +as well as using the supported method of UUID, or email you must update the other commands to retain +consistency across all commands. + +consistency is key + +--- + +## Design Guidelines Summary + +### ✅ Do +- Use **noun → verb → flags** +- Keep flag names and behavior **globally consistent** +- Ensure related commands support the **same inputs** + +### ❌ Don’t +- Create verb-first or one-off command names +- Introduce new flags for existing concepts +- Restrict identifiers in one command but not others +- Optimize for short-term convenience over long-term clarity + +--- + +## Why This Standard Matters + +Following this convention results in: + +- Fewer breaking changes as the CLI evolves +- A more intuitive and predictable developer experience +- Easier automation and scripting + +Consistency is not a cosmetic decision—it is a core usability feature. + +--- + +## Conclusion + +The **Noun–Verb–Flags** system, combined with **strict flag consistency and identifier flexibility**, provides a clean, extensible foundation for CLI design. Adhering to this standard ensures that every new command feels familiar, predictable, and easy to use. + +All future CLI development should conform to this document unless a well‑justified exception is explicitly approved. diff --git a/src/main/resources/application.yml b/cli/src/main/resources/application.yml similarity index 71% rename from src/main/resources/application.yml rename to cli/src/main/resources/application.yml index f3b2fe0..e4cd39a 100644 --- a/src/main/resources/application.yml +++ b/cli/src/main/resources/application.yml @@ -6,13 +6,8 @@ micronaut: services: justserve: url: https://www.justserve.org - client: - read-timeout: 20s justserve: token: ${:i-need-to-be-defined} -jackson: - deserialization: - ACCEPT_EMPTY_STRING_AS_NULL_OBJECT: true logger: levels: # org.justserve.auth.JustServeClientFilter: DEBUG \ No newline at end of file diff --git a/cli/src/test/groovy/org/justserve/cli/command/AssignOrgToProjectSpec.groovy b/cli/src/test/groovy/org/justserve/cli/command/AssignOrgToProjectSpec.groovy new file mode 100644 index 0000000..f1f0f31 --- /dev/null +++ b/cli/src/test/groovy/org/justserve/cli/command/AssignOrgToProjectSpec.groovy @@ -0,0 +1,40 @@ +package org.justserve.cli.command + +import io.micronaut.test.extensions.spock.annotation.MicronautTest +import org.justserve.model.ProjectCard +import spock.lang.Execution + +import static org.spockframework.runtime.model.parallel.ExecutionMode.SAME_THREAD + +@Execution(SAME_THREAD) +@MicronautTest +class AssignOrgToProjectSpec extends BaseCommandSpec { + + def "can assign an organization to a project"() { + given: + def orgSearchResponse = authOrgClient.searchByLocation(createSearchRequestForElkGrove()) + UUID orgId = orgSearchResponse.block().organizations.first().id + ProjectCard project = searchResults.first() + def args = ["assignOrgToProject", "-p", project.getId().toString(), "-o", orgId.toString()] + + when: + def (outputStream, errorStream) = executeCommand(ctx, args as String[]) + + then: + errorStream.matches(blankRegex) + outputStream.contains("Successfully assigned organization ${orgId} to project ${project.getId()}") + } + + def "fails gracefully when project or org does not exist"() { + given: + UUID fakeId = UUID.randomUUID() + def args = ["assignOrgToProject", "-p", fakeId.toString(), "-o", fakeId.toString()] + + when: + def (outputStream, errorStream) = executeCommand(ctx, args as String[]) + + then: + outputStream.matches(blankRegex) + errorStream.contains("Failed to assign organization ${fakeId} to project ${fakeId}. (400: Client 'justserve': Bad Request)") + } +} diff --git a/src/test/groovy/org/justserve/cli/command/BaseCommandSpec.groovy b/cli/src/test/groovy/org/justserve/cli/command/BaseCommandSpec.groovy similarity index 96% rename from src/test/groovy/org/justserve/cli/command/BaseCommandSpec.groovy rename to cli/src/test/groovy/org/justserve/cli/command/BaseCommandSpec.groovy index 1cc84d0..e9eca9e 100644 --- a/src/test/groovy/org/justserve/cli/command/BaseCommandSpec.groovy +++ b/cli/src/test/groovy/org/justserve/cli/command/BaseCommandSpec.groovy @@ -2,8 +2,8 @@ package org.justserve.cli.command import io.micronaut.configuration.picocli.PicocliRunner import io.micronaut.context.ApplicationContext +import org.justserve.JustServeCommand import org.justserve.JustServeSpec -import org.justserve.cli.JustServeCommand import spock.lang.Execution import spock.lang.Shared @@ -21,7 +21,7 @@ class BaseCommandSpec extends JustServeSpec { def setupSpec() { def props = new Properties() - new File('gradle.properties').withInputStream { stream -> + new File('../gradle.properties').withInputStream { stream -> props.load(stream) } ansi = "\\u001B\\[[;\\d]*m" diff --git a/src/test/groovy/org/justserve/cli/command/GetTempPasswordSpec.groovy b/cli/src/test/groovy/org/justserve/cli/command/GetTempPasswordSpec.groovy similarity index 83% rename from src/test/groovy/org/justserve/cli/command/GetTempPasswordSpec.groovy rename to cli/src/test/groovy/org/justserve/cli/command/GetTempPasswordSpec.groovy index 41d9ead..b37690c 100644 --- a/src/test/groovy/org/justserve/cli/command/GetTempPasswordSpec.groovy +++ b/cli/src/test/groovy/org/justserve/cli/command/GetTempPasswordSpec.groovy @@ -1,28 +1,25 @@ package org.justserve.cli.command import io.micronaut.context.ApplicationContext -import net.datafaker.Faker -import org.justserve.TestUser import spock.lang.Execution import spock.lang.Retry -import spock.lang.Shared import spock.lang.Unroll import static org.spockframework.runtime.model.parallel.ExecutionMode.SAME_THREAD @Execution(SAME_THREAD) @Retry -class GetTempPasswordSpec extends BaseCommandSpec { - @Shared - TestUser readOnlyUser - def setupSpec() { - readOnlyUser = new TestUser(new Faker(Locale.of("en-us"))) - readOnlyUser.uuid = createUser(readOnlyUser).body().getId() - } +class GetTempPasswordSpec extends BaseCommandSpec { - @Unroll("getting temp password with '#flag' and '#email' returns ") - def "commands to query temporary password should behave as expected with or without authentication"() { + @Unroll("getting temp password with '#flag' and '#email' #expectation") + def "commands to query temporary password should behave as expected with or without authentication"( + String flag, + String email, + ApplicationContext context, + String expectedOutput, + String expectedError + ) { when: def (outputStream, errorStream) = executeCommand(context as ApplicationContext, ["getTempPassword", flag, email] as String[]) diff --git a/cli/src/test/groovy/org/justserve/cli/command/MakeOrgAdminSpec.groovy b/cli/src/test/groovy/org/justserve/cli/command/MakeOrgAdminSpec.groovy new file mode 100644 index 0000000..996d2e9 --- /dev/null +++ b/cli/src/test/groovy/org/justserve/cli/command/MakeOrgAdminSpec.groovy @@ -0,0 +1,104 @@ +package org.justserve.cli.command + +import io.micronaut.context.ApplicationContext +import spock.lang.Shared + +class MakeOrgAdminSpec extends BaseCommandSpec { + + @Shared + UUID sharedUserID + + @Shared + List sharedOrgs + + def setupSpec() { + sharedUserID = createUser().id + sharedOrgs = createTestOrgs(3) + } + + @SuppressWarnings("GroovyAssignabilityCheck") + def "can make a user an admin to #orgCount org(s) using the #orgFlag and #userFlag flags as an authorized user"(String orgFlag, Integer orgCount, String userFlag) { + given: + def orgs = sharedOrgs.take(orgCount).join(",") + + when: + def (outputStream, errorStream) = executeCommand(ctx as ApplicationContext, ["makeOrgAdmin", orgFlag, orgs, userFlag, sharedUserID] as String[]) + + then: + verifyAll { + (outputStream as String).contains("successfully reassigned ${orgCount} orgs to user ${sharedUserID}") + errorStream.matches(blankRegex) + } + + where: + [orgFlag, orgCount, userFlag] << [["-o", "--org"], [3, 1], ["-u", "--user"]].combinations() + } + + @SuppressWarnings("GroovyAssignabilityCheck") + def "fails to make a user an admin to #orgCount org(s) when unauthorized"(String orgFlag, Integer orgCount, String userFlag) { + given: + def orgs = sharedOrgs.take(orgCount).join(",") + + when: + def (outputStream, errorStream) = executeCommand(noAuthCtx as ApplicationContext, ["makeOrgAdmin", orgFlag, orgs, userFlag, sharedUserID] as String[]) + + then: + verifyAll { + errorStream.matches(tokenNotSetRegex) + outputStream.matches(blankRegex) + } + + where: + [orgFlag, orgCount, userFlag] << [["-o", "--org"], [3, 1], ["-u", "--user"]].combinations() + } + + @SuppressWarnings("GroovyAssignabilityCheck") + def "can make a user an admin to #orgCount where at least one org ID does not exist on JustServe using the #orgFlag and #userFlag flags"( + String orgFlag, Integer orgCount, String userFlag) { + given: + String orgs + def fakeId = faker.internet().uuid().toString() + if (orgCount == 1) { + orgs = fakeId + } else { + orgs = sharedOrgs.take(orgCount - 1).join(",") + "," + fakeId + } + + when: + def (outputStream, errorStream) = executeCommand(ctx as ApplicationContext, ["makeOrgAdmin", orgFlag, orgs, userFlag, sharedUserID] as String[]) + + then: + verifyAll { + (outputStream as String).contains("successfully reassigned ${orgCount - 1} orgs to user ${sharedUserID}") + (errorStream as String).contains("Failed to make user ${sharedUserID} an admin for organization ${fakeId}.") + } + + where: + [orgFlag, orgCount, userFlag] << [["-o", "--org"], [3, 1], ["-u", "--user"]].combinations() + } + + + @SuppressWarnings("GroovyAssignabilityCheck") + def "can make a user an admin to #orgCount where at least one org Slug does not exist on JustServe using the #orgFlag and #userFlag flags"(String orgFlag, Integer orgCount, String userFlag) { + given: + String orgs + def fakeSlug = faker.internet().slug().toString() + if (orgCount == 1) { + orgs = fakeSlug + } else { + orgs = authOrgClient.searchByLocation(createSearchRequestForElkGrove()).block().getOrganizations().url.take(orgCount - 1).join(",") + "," + fakeSlug + } + + when: + def (outputStream, errorStream) = executeCommand(ctx as ApplicationContext, ["makeOrgAdmin", orgFlag, orgs, userFlag, sharedUserID] as String[]) + + then: + verifyAll { + (outputStream as String).contains("successfully reassigned ${orgCount - 1} orgs to user ${sharedUserID}") + (errorStream as String).contains("Error The org '${fakeSlug}' is not found on JustServe") + } + + where: + [orgFlag, orgCount, userFlag] << [["-o", "--org"], [3, 1], ["-u", "--user"]].combinations() + } +} diff --git a/cli/src/test/groovy/org/justserve/cli/command/UnReassignProjectsSpec.groovy b/cli/src/test/groovy/org/justserve/cli/command/UnReassignProjectsSpec.groovy new file mode 100644 index 0000000..001b7e0 --- /dev/null +++ b/cli/src/test/groovy/org/justserve/cli/command/UnReassignProjectsSpec.groovy @@ -0,0 +1,87 @@ +package org.justserve.cli.command + + +import io.micronaut.test.extensions.spock.annotation.MicronautTest +import org.justserve.TestUser +import org.justserve.model.ProjectCard +import org.justserve.util.EmailParser +import org.justserve.util.TestEmailGenerator +import spock.lang.Execution +import spock.lang.Shared + +import static org.spockframework.runtime.model.parallel.ExecutionMode.SAME_THREAD + +@Execution(SAME_THREAD) +@MicronautTest +class UnReassignProjectsSpec extends BaseCommandSpec { + + @Shared + File tempEmlFile + + @Shared + Map testEmails + + @Shared + List testProjects + + def setupSpec() { + testProjects = getProjectsByLocation(faker.location().toString()) + def newReadOnlyUser = new TestUser(faker) + newReadOnlyUser.uuid = createUser().id + testEmails = new HashMap<>() + testEmails.put("forwarded-reassignment-email", [TestEmailGenerator.generateMockValidEmlContent(testProjects, readOnlyUser), readOnlyUser]) + testEmails.put("automated-reassignment-email", [TestEmailGenerator.generateMockValidEmlContent(testProjects, newReadOnlyUser), newReadOnlyUser]) + testEmails.put("email-without-justserve-content", [TestEmailGenerator.generateInvalidMockEmlContent(), readOnlyUser]) + } + + def "can make reassignments from #title to a user"(String title, String fileContent, TestUser user) { + given: + if (title.contains("without")) { + return + } + tempEmlFile = File.createTempFile(title, ".eml") + tempEmlFile.write(fileContent) + def args = ["unReassignProjects", "-u", user.uuid.toString(), "-f", tempEmlFile.absolutePath] + def projectCount = EmailParser.getProjects(fileContent).values().flatten().size() + + when: + def (outputStream, errorStream) = executeCommand(ctx, args as String[]) + + then: + errorStream.matches(blankRegex) + testProjects.each { project -> outputStream.contains(project.id.toString()) + } + outputStream.contains("Successfully reassigned ${projectCount} projects to user ${user.uuid}") + + cleanup: + try { + tempEmlFile.delete() + } catch (Exception ignored) { + } + + where: + [title, fileContent, user] << testEmails.collect { key, value -> [key, value[0], value[1]] } + } + + def "shows error when project ID is invalid"() { + given: + def invalidProject = new ProjectCard().setId(UUID.randomUUID()).setTitle("Surprised by Joy") + def emailContent = TestEmailGenerator.generateMockValidEmlContent([invalidProject], readOnlyUser) + tempEmlFile = File.createTempFile("invalid-project", ".eml") + tempEmlFile.write(emailContent) + def args = ["unReassignProjects", "-u", readOnlyUser.uuid.toString(), "-f", tempEmlFile.absolutePath] + + when: + def (outputStream, errorStream) = executeCommand(ctx, args as String[]) + + then: + errorStream.contains("Failed to get project 'Surprised by Joy' (${invalidProject.id})") + outputStream.contains("Successfully reassigned 0 projects") + + cleanup: + try { + tempEmlFile.delete() + } catch (Exception ignored) { + } + } +} diff --git a/src/test/groovy/org/justserve/util/EmailParserSpec.groovy b/cli/src/test/groovy/org/justserve/util/EmailParserSpec.groovy similarity index 65% rename from src/test/groovy/org/justserve/util/EmailParserSpec.groovy rename to cli/src/test/groovy/org/justserve/util/EmailParserSpec.groovy index e708e63..319f66e 100644 --- a/src/test/groovy/org/justserve/util/EmailParserSpec.groovy +++ b/cli/src/test/groovy/org/justserve/util/EmailParserSpec.groovy @@ -3,13 +3,16 @@ package org.justserve.util import io.micronaut.core.io.ResourceResolver import io.micronaut.test.extensions.spock.annotation.MicronautTest import jakarta.inject.Inject +import net.datafaker.Faker import org.jsoup.nodes.Document -import org.justserve.cli.util.JustServeEmailParserError +import org.justserve.TestUser +import org.justserve.model.ProjectCard +import org.justserve.util.TestEmailGenerator.UrlStyle import spock.lang.Shared import spock.lang.Specification +import spock.lang.Unroll import java.util.stream.Collectors -import java.util.stream.Stream @MicronautTest class EmailParserSpec extends Specification { @@ -27,16 +30,17 @@ class EmailParserSpec extends Specification { def setupSpec() { testEmails = new HashMap<>() - Stream.of("sara-anderson-email.eml", "test-with-automated-email.eml", "test-without-automated-email.eml").forEach { file -> - def resource = resourceResolver.getResourceAsStream("classpath:$file") - resource.ifPresent { stream -> - try (BufferedReader reader = new BufferedReader(new InputStreamReader(stream))) { - testEmails.put(file.replace(".eml", ""), reader.lines().collect(Collectors.joining(System.lineSeparator()))) - } catch (IOException e) { - throw new RuntimeException("Failed to read test file: $file", e) - } - } - } + + Faker faker = new Faker() + TestUser recipient = new TestUser(faker) + List mockProjects = [ + new ProjectCard(id: UUID.randomUUID(), title: faker.book().title()), + new ProjectCard(id: UUID.randomUUID(), title: faker.book().title()) + ] + + testEmails.put("test-with-automated-email", TestEmailGenerator.generateMockValidEmlContent(mockProjects, recipient)) + testEmails.put("test-with-automated-email-zendesk", TestEmailGenerator.generateMockZendeskEmlContent(mockProjects, recipient)) + testEmails.put("test-without-automated-email", TestEmailGenerator.generateInvalidMockEmlContent()) testTrackingUrls = new HashMap<>() def yamlResource = resourceResolver.getResourceAsStream("classpath:projects.yaml") @@ -64,7 +68,7 @@ class EmailParserSpec extends Specification { return } def error = thrown(JustServeEmailParserError) - error.message == "Email is not a JustServe generated email." + error.message == "Email does not contain an HTML body." where: @@ -113,9 +117,31 @@ class EmailParserSpec extends Specification { return } def error = thrown(JustServeEmailParserError) - error.message == "Email is not a JustServe generated email." + error.message == "Email does not contain an HTML body." where: [title, fileContent] << testEmails.collect { key, value -> [key, value] } } + + @Unroll + def "Can parse project URLs with different encoding styles"(UrlStyle urlStyle) { + given: + Faker faker = new Faker() + TestUser recipient = new TestUser(faker) + List myMockProjects = [ + new ProjectCard(id: UUID.randomUUID(), title: faker.book().title()), + new ProjectCard(id: UUID.randomUUID(), title: faker.book().title()) + ] + String emailContent = TestEmailGenerator.generateMockValidEmlContent(myMockProjects, recipient, urlStyle) + + when: + Map> projects = EmailParser.getProjects(emailContent) + + then: + projects.size() == 2 + myMockProjects.every { mock -> projects.values().flatten().contains(mock.id) } + + where: + urlStyle << UrlStyle.values() + } } diff --git a/cli/src/test/groovy/org/justserve/util/TestEmailGenerator.groovy b/cli/src/test/groovy/org/justserve/util/TestEmailGenerator.groovy new file mode 100644 index 0000000..822655a --- /dev/null +++ b/cli/src/test/groovy/org/justserve/util/TestEmailGenerator.groovy @@ -0,0 +1,298 @@ +package org.justserve.util + +import net.datafaker.Faker +import org.justserve.TestUser +import org.justserve.model.ProjectCard + +import static java.util.concurrent.TimeUnit.DAYS + +class TestEmailGenerator { + + enum UrlStyle { + CLEAN, + ENCODED_DEFENSE, + ENCODED_AWS + } + + static String generateMockValidEmlContent(List projects, TestUser recipient, UrlStyle urlStyle = UrlStyle.ENCODED_AWS) { + StringBuilder sb = new StringBuilder() + Faker faker = new Faker() + + String recipientName = recipient.firstName + " " + recipient.lastName + String senderName = faker.name().fullName() + String senderEmail = faker.internet().emailAddress() + String boundary = "000000000000" + faker.internet().uuid().replace("-", "").substring(0, 16) + String phoneNumber = faker.phoneNumber().phoneNumber() + + sb.append("Return-Path: <").append(senderEmail).append(">\n") + sb.append("Date: ").append(faker.timeAndDate().past(1, DAYS)).append("\n") + sb.append("From: ").append(senderName).append(" <").append(senderEmail).append(">\n") + sb.append("To: JustServeSupport \n") + sb.append("Subject: Fwd: Project Reassignment\n") + sb.append("Mime-Version: 1.0\n") + sb.append("Content-Type: multipart/alternative; boundary=").append(boundary).append("\n\n") + + // Plain text part + sb.append("--").append(boundary).append("\n") + sb.append("Content-Type: text/plain; charset=UTF-8\n") + sb.append("Content-Transfer-Encoding: quoted-printable\n\n") + + sb.append("Hi Jonathan,=\n\n") + sb.append("Here you go. Thx for all of your help.=\n\n") + sb.append(senderName).append("=\n\n") + sb.append("---------- Forwarded message ---------\n") + sb.append("From: JustServe.org \n") + sb.append("Date: Tue, Dec 16, 2025 at 8:27 AM\n") + sb.append("Subject: Project Reassignment\n") + sb.append("To: <").append(senderEmail).append(">\n\n") + sb.append("Project Reassignment\n\n") + sb.append("The following projects have been reassigned from ").append(faker.name().fullName()).append(", to ") + .append(recipientName).append(", by ").append(senderName).append(":\n\n") + + projects.each { project -> + sb.append(" - ").append(project.title).append("\n") + sb.append(" \n") + } + + sb.append("\n").append(recipientName).append(" can now access these projects in their manage projects page for editing.\n\n") + sb.append("JustServe.org is provided as a service by The Church of Jesus Christ of Latter-day Saints.\n\n") + sb.append("© 2020 by Intellectual Reserve, Inc. All rights reserved.\n\n") + sb.append("50 East North Temple, Salt Lake City, Utah, 84150\n\n") + sb.append("This email was sent to: ").append(senderEmail).append("\n\n") + + // HTML part + sb.append("--").append(boundary).append("\n") + sb.append("Content-Type: text/html; charset=UTF-8\n") + sb.append("Content-Transfer-Encoding: quoted-printable\n\n") + + String htmlTemplateStart = """
Here you go.  Thx for your help.  

---------- Forwarded message ---------
From: JustServe.org <noreply-js@mail.justserve.org>
Date: Tue, Dec 16, 2025 at 8:27 AM
Subject: Project Reassignment
To: <${senderEmail}>


+ + + + +
+ + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ Logo Title +
+ + + + + + + + + + +
Project Reassignment
+

+ + The following projects have been reassigned from ${faker.name().fullName()}, to ${recipientName}, by ${senderName}: + +

+
    """ + + String htmlTemplateEnd = """
+

+ + ${recipientName} can now access these projects in their manage projects page for editing. + +

+
+
+
+ + + + + + + + + + + + + + +
+

JustServe.org is provided as a service by The Church of Jesus Christ of Latter-day Saints.

+

© 2020 by Intellectual Reserve, Inc. All rights reserved.

+

50 East North Temple, Salt Lake City, Utah, 84150

+

Terms of Use (Updated 8/12/2021) | Privacy Notice (Updated 10/12/2022)

+

This email was sent to: ${senderEmail}

+

If you would like to stop receiving these types of emails you may unsubscribe from your account settings page.

+
+
+ +
+


--
${senderName}
JustServe Assistant Area Director
${faker.address().state()} 
${phoneNumber}  Cell and Text



+""" + + sb.append(htmlTemplateStart) + + projects.each { project -> + String url + switch (urlStyle) { + case UrlStyle.ENCODED_DEFENSE: + url = "https://urldefense.com/v3/__https://www.justserve.org*2Fprojects*2F" + project.id + "/1/0100019cd9daccde-30d2f0ce-ca96-45a1-bd36-1cccc809eb61-000000/" + break + case UrlStyle.ENCODED_AWS: + url = "https://v6q93rxd.r.us-east-1.awstrack.me/L0/https:%2F%2Fwww.justserve.org%2Fprojects%2F" + project.id + "/1/0100019ce325c14c" + break + default: // UrlStyle.CLEAN + url = "https://www.justserve.org/projects/" + project.id + break + } + sb.append("
  • ").append(project.title).append("
  • ") + } + + sb.append(htmlTemplateEnd) + + sb.append("\n--").append(boundary).append("--\n") + return sb.toString() + } + + static String generateInvalidMockEmlContent() { + StringBuilder sb = new StringBuilder() + Faker faker = new Faker() + + String senderName = faker.name().fullName() + String senderEmail = faker.internet().emailAddress() + + sb.append("Return-Path: <").append(senderEmail).append(">\n") + sb.append("Date: ").append(faker.timeAndDate().past(1, DAYS)).append("\n") + sb.append("From: ").append(senderName).append(" <").append(senderEmail).append(">\n") + sb.append("To: JustServeSupport \n") + sb.append("Subject: Random user email without JS content\n") + sb.append("Mime-Version: 1.0\n") + sb.append("Content-Type: text/plain; charset=UTF-8\n") + sb.append("Content-Transfer-Encoding: quoted-printable\n\n") + + sb.append("Hi Jonathan,=\n\n") + sb.append("Can you help me reset my password? I forgot it.\n\n") + sb.append("Thanks,\n") + sb.append(senderName).append("\n") + + return sb.toString() + } + + static String generateMockZendeskEmlContent(List projects, TestUser recipient) { + StringBuilder sb = new StringBuilder() + Faker faker = new Faker() + + String senderName = faker.name().fullName() + String senderEmail = faker.internet().emailAddress() + String recipientName = recipient.firstName + " " + recipient.lastName + String recipientEmail = recipient.email + String boundary = "000000000000" + faker.internet().uuid().replace("-", "").substring(0, 16) + + sb.append("Return-Path: <").append(senderEmail).append(">\n") + sb.append("Date: ").append(faker.timeAndDate().past(1, DAYS)).append("\n") + sb.append("From: ").append(senderName).append(" <").append(senderEmail).append(">\n") + sb.append("To: JustServeSupport \n") + sb.append("Subject: Fwd: Project Reassignment\n") + sb.append("Mime-Version: 1.0\n") + sb.append("Content-Type: multipart/alternative; boundary=\"").append(boundary).append("\"\n\n") + + // Plain text part + sb.append("--").append(boundary).append("\n") + sb.append("Content-Type: text/plain; charset=\"UTF-8\"\n") + sb.append("Content-Transfer-Encoding: quoted-printable\n\n") + + sb.append("CCJSS ").append(faker.name().fullName()).append(" reassigned ").append(projects.size()).append(" projects to their lead JSS account, ").append(recipientName).append(".\n\n") + sb.append("---------- Forwarded message ---------\n") + sb.append("From: JustServe.org \n") + sb.append("Date: Thu, Mar 12, 2026 at 1:43 PM\n") + sb.append("Subject: Project Reassignment\n") + sb.append("To: <").append(recipientEmail).append(">\n\n") + sb.append("Project Reassignment\n\n") + sb.append("The following projects have been reassigned from ").append(faker.name().fullName()).append(", to ").append(recipientName).append(", by ").append(senderName).append(":\n\n") + + projects.each { project -> + sb.append(" - ").append(project.title).append("\n") + sb.append(" \n") + } + + sb.append("\n").append(recipientName).append(" can now access these projects in their manage projects page for editing.\n\n") + + // HTML part + sb.append("--").append(boundary).append("\n") + sb.append("Content-Type: text/html; charset=\"UTF-8\"\n") + sb.append("Content-Transfer-Encoding: quoted-printable\n\n") + + String htmlTemplateStart = """
    CCJSS ${faker.name().fullName()} reassigned ${projects.size()} projects to their lead JSS account, ${recipientName}.

    ---------- Forwarded message ---------
    From: JustServe.org <noreply-js@mail.justserve.org>
    Date: Thu, Mar 12, 2026 at 1:43 PM
    Subject: Project Reassignment
    To: <${recipientEmail}>


    +
    + + + + + + + + +
    + + + + + + + + + +
    + Logo Title +
    +
      """ + + String htmlTemplateEnd = """
    +
    +
    +
    """ + + sb.append(htmlTemplateStart) + + projects.each { project -> + String uglyUrl = "https://v6q93rxd.r.us-east-1.awstrack.me/L0/https:%2F%2Fwww.justserve.org%2Fprojects%2F" + project.id + "/1/0100019ce325c14c" + sb.append("
  • ").append(project.title).append("
  • ") + } + + sb.append(htmlTemplateEnd) + + sb.append("\n--").append(boundary).append("--\n") + return sb.toString() + } +} diff --git a/src/test/resources/SpockConfig.groovy b/cli/src/test/resources/SpockConfig.groovy similarity index 100% rename from src/test/resources/SpockConfig.groovy rename to cli/src/test/resources/SpockConfig.groovy diff --git a/src/test/resources/application-test.yaml b/cli/src/test/resources/application-test.yaml similarity index 100% rename from src/test/resources/application-test.yaml rename to cli/src/test/resources/application-test.yaml diff --git a/src/test/resources/projects.yaml b/cli/src/test/resources/projects.yaml similarity index 100% rename from src/test/resources/projects.yaml rename to cli/src/test/resources/projects.yaml diff --git a/core/build.gradle.kts b/core/build.gradle.kts new file mode 100644 index 0000000..5148922 --- /dev/null +++ b/core/build.gradle.kts @@ -0,0 +1,80 @@ +import org.apache.tools.ant.filters.ReplaceTokens +import java.util.* + +plugins { + id("groovy") + id("io.micronaut.library") + id("io.micronaut.openapi") + id("com.github.hauner.jarTest") +} + +version = project.properties["justserveCliVersion"]!! +group = "org.justserve" + +repositories { + mavenCentral() +} + +dependencies { + annotationProcessor("org.projectlombok:lombok") + annotationProcessor("io.micronaut:micronaut-http-validation") + annotationProcessor("io.micronaut.openapi:micronaut-openapi") + annotationProcessor("io.micronaut.serde:micronaut-serde-processor") + implementation("io.micronaut.serde:micronaut-serde-jackson") + implementation("io.micronaut:micronaut-retry") + implementation("org.simplejavamail:simple-java-mail:${project.properties["simpleJavaMailVersion"]}") + implementation("org.jsoup:jsoup:${project.properties["jsoupVersion"]}") + implementation("io.micronaut.reactor:micronaut-reactor") + compileOnly("io.micronaut:micronaut-http-client") + compileOnly("io.micronaut.openapi:micronaut-openapi-annotations") + compileOnly("org.projectlombok:lombok") + runtimeOnly("ch.qos.logback:logback-classic") + runtimeOnly("org.yaml:snakeyaml") + testImplementation("net.datafaker:datafaker:${project.properties["datafakerVersion"]}") + testImplementation("org.apache.commons:commons-lang3:${project.properties["commonsLang3Version"]}") + testImplementation("io.micronaut:micronaut-http-client") +} + +java { + sourceCompatibility = JavaVersion.toVersion("21") + targetCompatibility = JavaVersion.toVersion("21") +} + +micronaut { + testRuntime("spock2") + openapi { + version = project.properties["micronautOpenapiSpecVersion"] as String + client(file("src/main/resources/schema.yml")) { + apiPackageName = "org.justserve.client" + modelPackageName = "org.justserve.model" + useReactive = true + useAuth = false + lombok.set(true) + clientId = "justserve" + apiNameSuffix = "Client" + alwaysUseGenerateHttpResponse = false + additionalProperties.put("retryable", "true") +// https://github.com/micronaut-projects/micronaut-openapi/discussions/1783 + schemaMapping.put("EventType", "org.justserve.model.EventType") + importMapping.put("EventType", "org.justserve.model.EventType") + schemaMapping.put("ProjectLocationType", "org.justserve.model.ProjectLocationType") + importMapping.put("ProjectLocationType", "org.justserve.model.ProjectLocationType") + schemaMapping.put("ProjectStatus", "org.justserve.model.ProjectStatus") + importMapping.put("ProjectStatus", "org.justserve.model.ProjectStatus") + schemaMapping.put("TimeZone", "org.justserve.model.TimeZone") + importMapping.put("TimeZone", "org.justserve.model.TimeZone") + } + } + processing { + incremental(true) + annotations("org.justserve.*") + } +} + +tasks.withType { + val props = Properties() + file("../gradle.properties").inputStream().use { props.load(it) } + filesMatching("**/application.yml") { + filter(mapOf("tokens" to props), ReplaceTokens::class.java) + } +} diff --git a/src/main/java/org/justserve/auth/JustServeClientFilter.java b/core/src/main/java/org/justserve/auth/JustServeClientFilter.java similarity index 92% rename from src/main/java/org/justserve/auth/JustServeClientFilter.java rename to core/src/main/java/org/justserve/auth/JustServeClientFilter.java index 6a6b425..c334e72 100644 --- a/src/main/java/org/justserve/auth/JustServeClientFilter.java +++ b/core/src/main/java/org/justserve/auth/JustServeClientFilter.java @@ -5,6 +5,7 @@ import io.micronaut.http.MutableHttpRequest; import io.micronaut.http.annotation.ClientFilter; import io.micronaut.http.annotation.RequestFilter; +import lombok.extern.slf4j.Slf4j; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -17,11 +18,10 @@ @SuppressWarnings("unused") @ClientFilter("/**") @Requires(property = "justserve.token") +@Slf4j public class JustServeClientFilter { private final String token; - private final Logger log = LoggerFactory.getLogger(JustServeClientFilter.class); - /** * Constructs a new JustServeClientFilter. * @@ -43,7 +43,9 @@ public void doFilter(MutableHttpRequest request) { log.debug("Skipping bearer token for login request ({})", request.getMethod() + " " + request.getUri()); return; } - + if (token.isEmpty()) { + log.warn("justserve.token is not set"); + } log.debug("adding bearer token to request ({})", request.getMethod() + " " + request.getUri()); request.bearerAuth(token); } diff --git a/src/main/java/org/justserve/client/BoundaryPermissionClient.java b/core/src/main/java/org/justserve/client/BoundaryPermissionClient.java similarity index 91% rename from src/main/java/org/justserve/client/BoundaryPermissionClient.java rename to core/src/main/java/org/justserve/client/BoundaryPermissionClient.java index bcc54c1..e45d9b7 100644 --- a/src/main/java/org/justserve/client/BoundaryPermissionClient.java +++ b/core/src/main/java/org/justserve/client/BoundaryPermissionClient.java @@ -6,6 +6,7 @@ import io.micronaut.http.client.annotation.Client; import io.micronaut.retry.annotation.Retryable; import jakarta.validation.constraints.NotNull; +import reactor.core.publisher.Mono; import java.util.UUID; @@ -25,7 +26,7 @@ public interface BoundaryPermissionClient { */ @Retryable @Put("/api/v1/boundaries/rep/{userId}/org/{orgId}") - HttpResponse makeAdminForOrg( + Mono> makeAdminForOrg( @PathVariable("orgId") @NotNull UUID orgId, @PathVariable("userId") @NotNull UUID userId ); diff --git a/core/src/main/java/org/justserve/client/GraphQLClient.java b/core/src/main/java/org/justserve/client/GraphQLClient.java new file mode 100644 index 0000000..39afdf3 --- /dev/null +++ b/core/src/main/java/org/justserve/client/GraphQLClient.java @@ -0,0 +1,151 @@ +package org.justserve.client; + +import io.micronaut.http.annotation.Body; +import io.micronaut.http.annotation.Consumes; +import io.micronaut.http.annotation.Post; +import io.micronaut.http.annotation.Produces; +import io.micronaut.http.client.annotation.Client; +import io.micronaut.retry.annotation.Retryable; +import org.justserve.model.*; +import org.justserve.model.graph.*; +import reactor.core.publisher.Mono; + +import java.util.ArrayList; +import java.util.List; + +@Produces("application/json") +@Consumes("application/graphql-response+json; charset=utf-8") +@Retryable +@Client(id = "justserve", path = "/graphql") +public interface GraphQLClient { + + @Post + Mono> createEvent(@Body CreateEventMutation request); + + @Post + Mono> createEvents(@Body CreateEventsMutation request); + + @Post + Mono> createRecurringEvents(@Body CreateRecurringEventsMutation request); + + @Post + Mono> executeAddProjectAttachment(@Body GraphQLAddProjectAttachmentRequest request); + + @Post + Mono> executeAddProjectOrganization(@Body GraphQLAddProjectOrganizationRequest request); + + @Post + Mono> executeCombinedMutationUpdateProjectAddProjectTag(@Body GraphQLCombinedMutationUpdateProjectAddProjectTagRequest request); + + @Post + Mono> executeCreateProject(@Body GraphQLCreateProjectRequest request); + + @Post + Mono> executePublishProject(@Body GraphQLPublishProjectRequest request); + + @Post + Mono> executeSearchOrganization(@Body GraphQLSearchOrganizationRequest request); + + @Post + Mono> executeSetProjectLocation(@Body GraphQLSetProjectLocationRequest request); + + @Post + Mono> executeUpdateProjectAttachment(@Body GraphQLUpdateProjectAttachmentRequest request); + + @Post + Mono> executeUpdateProjectListing(@Body GraphQLUpdateProjectListingRequest request); + + @Post + Mono> executeUpdateProject(@Body GraphQLUpdateProjectRequest request); + + default Mono> addProjectAttachment(GraphQLAddProjectAttachmentVariables variables) { + String fixedQuery = "mutation ($projectId: ID!, $attachmentId: ID!) {\n addProjectAttachment(projectId: $projectId, attachmentId: $attachmentId) {\n attachmentId\n }\n }"; + GraphQLAddProjectAttachmentRequest request = new GraphQLAddProjectAttachmentRequest(); + request.setQuery(fixedQuery); + request.setVariables(variables); + return this.executeAddProjectAttachment(request); + } + + default Mono> addProjectOrganization(GraphQLAddProjectOrganizationVariables variables) { + String fixedQuery = "mutation addProjectOrganization($organizationId: ID!, $projectId: ID!) {\n addProjectOrganization(organizationId: $organizationId, projectId: $projectId) {\n id\n organizations {\n id\n name\n }\n }\n }"; + GraphQLAddProjectOrganizationRequest request = new GraphQLAddProjectOrganizationRequest(); + request.setQuery(fixedQuery); + request.setVariables(variables); + return this.executeAddProjectOrganization(request); + } + + default Mono> combinedMutationUpdateProjectAddProjectTag(GraphQLCombinedMutationUpdateProjectAddProjectTagVariables variables) { + String fixedQuery = "mutation combinedMutation($projectId: ID!, $modify: UpdateProjectInput!) {\n updateProject(\n id: $projectId,\n modify: $modify\n ) {\n id\n wheelchairAccessible\n itemDonations\n indoors\n longDescription\n shortDescription\n sponsorUserId\n groupProjects\n }\n\n skill0: addProjectTag(\n projectId: $projectId\n tagId: 31\n ) {\n id\n tags {\n id\n tagType\n tagTypeId\n translations(languageId: 1) {\n description\n label\n languageId\n }\n }\n }\nskill1: addProjectTag(\n projectId: $projectId\n tagId: 46\n ) {\n id\n tags {\n id\n tagType\n tagTypeId\n translations(languageId: 1) {\n description\n label\n languageId\n }\n }\n }\n\n interest0: addProjectTag(\n projectId: $projectId\n tagId: 11\n ) {\n id\n tags {\n id\n tagType\n tagTypeId\n translations(languageId: 1) {\n description\n label\n languageId\n }\n }\n }\ninterest1: addProjectTag(\n projectId: $projectId\n tagId: 26\n ) {\n id\n tags {\n id\n tagType\n tagTypeId\n translations(languageId: 1) {\n description\n label\n languageId\n }\n }\n }\n }"; + GraphQLCombinedMutationUpdateProjectAddProjectTagRequest request = new GraphQLCombinedMutationUpdateProjectAddProjectTagRequest(); + request.setQuery(fixedQuery); + request.setVariables(variables); + return this.executeCombinedMutationUpdateProjectAddProjectTag(request); + } + + default Mono> createProject(GraphQLCreateProjectVariables variables) { + String fixedQuery = "mutation createProject($title: String!, $eventType: ProjectType!, $locationType: ProjectLocationType!, $redirect: String) {\n createProject(\n title: $title\n eventType: $eventType\n locationType: $locationType\n redirect: $redirect\n ) {\n id\n title\n typeId\n locationTypeId\n externalVolunteerUrl\n statusId\n }\n }"; + GraphQLCreateProjectRequest request = new GraphQLCreateProjectRequest(); + request.setQuery(fixedQuery); + request.setVariables(variables); + return this.executeCreateProject(request); + } + + default Mono> publishProject(GraphQLPublishProjectVariables variables) { + String fixedQuery = "mutation ($projectId: ID!){\n publishProject(projectId: $projectId) {\n id\n statusId\n }\n }"; + GraphQLPublishProjectRequest request = new GraphQLPublishProjectRequest(); + request.setQuery(fixedQuery); + request.setVariables(variables); + return this.executePublishProject(request); + } + + default Mono> searchOrganization(GraphQLSearchOrganizationVariables variables) { + String fixedQuery = "\n query organization(\n $searchTerm: String!\n $includeAll: Boolean\n $activeOnly: Boolean\n ) {\n adminOrganizationSearchByTitle(\n activeOnly: $activeOnly\n includeAll: $includeAll\n title: $searchTerm\n ) {\n id\n name\n logo\n description\n contactName\n contactPhone\n contactEmail\n url\n location {\n displayCity\n displayState\n }\n }\n }\n "; + GraphQLSearchOrganizationRequest request = new GraphQLSearchOrganizationRequest(); + request.setQuery(fixedQuery); + request.setVariables(variables); + return this.executeSearchOrganization(request); + } + + default Mono> setProjectLocation(GraphQLSetProjectLocationVariables variables) { + String fixedQuery = "mutation setProjectLocation($projectId: ID!, $location: String, $locationData: LocationDataInput) {\n setProjectLocation(\n projectId: $projectId\n location: $location\n locationData: $locationData\n ) {\n displayAddress\n displayAddress2\n displayCity\n displayCountry\n displayCountryCode\n displayCounty\n displayNeighborhood\n displayPostalCode\n displayState\n id\n latitude\n locationDetails\n locationName\n longitude\n maxLatitude\n maxLongitude\n minLatitude\n minLongitude\n timezone\n civicGeography {\n state {\n code\n }\n }\n churchGeography {\n areaUnitId\n ccUnitId\n missionUnitId\n stakeUnitId\n }\n }\n }"; + GraphQLSetProjectLocationRequest request = new GraphQLSetProjectLocationRequest(); + request.setQuery(fixedQuery); + request.setVariables(variables); + return this.executeSetProjectLocation(request); + } + + default Mono> updateProjectAttachment(GraphQLUpdateProjectAttachmentVariables variables) { + String fixedQuery = "mutation ($attachmentId: ID!, $title: String!, $description: String!) {\n updateProjectAttachment(attachmentId: $attachmentId, title: $title, description: $description) {\n attachmentId\n }\n }"; + GraphQLUpdateProjectAttachmentRequest request = new GraphQLUpdateProjectAttachmentRequest(); + request.setQuery(fixedQuery); + request.setVariables(variables); + return this.executeUpdateProjectAttachment(request); + } + + default Mono> updateProjectListing(GraphQLUpdateProjectListingVariables variables) { + String fixedQuery = "mutation listing ($projectId: ID!, $unlisted: Boolean!) {\n updateProjectListing(projectId: $projectId, unlisted: $unlisted) {\n id\n unlisted\n }\n }"; + GraphQLUpdateProjectListingRequest request = new GraphQLUpdateProjectListingRequest(); + request.setQuery(fixedQuery); + request.setVariables(variables); + return this.executeUpdateProjectListing(request); + } + + default Mono> updateProject(GraphQLUpdateProjectVariables variables) { + String mutationFormat = "mutation ($projectId: ID!, $logo: String!) {\n updateProject(id: $projectId, modify: { logo: $logo }) {\n %s\n }\n }"; + + List responseFields = new ArrayList<>(); + responseFields.add("id"); + + if (variables.getLogo() != null) { + responseFields.add("logo"); + } + + String fieldsString = String.join("\n", responseFields); + String dynamicQuery = String.format(mutationFormat, fieldsString); + + GraphQLUpdateProjectRequest request = new GraphQLUpdateProjectRequest(); + request.setQuery(dynamicQuery); + request.setVariables(variables); + return this.executeUpdateProject(request); + } +} diff --git a/core/src/main/java/org/justserve/client/GraphQLErrorClientFilter.java b/core/src/main/java/org/justserve/client/GraphQLErrorClientFilter.java new file mode 100644 index 0000000..d45138e --- /dev/null +++ b/core/src/main/java/org/justserve/client/GraphQLErrorClientFilter.java @@ -0,0 +1,46 @@ +package org.justserve.client; + +import io.micronaut.http.HttpResponse; +import io.micronaut.http.MutableHttpRequest; +import io.micronaut.http.annotation.Filter; +import io.micronaut.http.client.exceptions.HttpClientResponseException; +import io.micronaut.http.filter.ClientFilterChain; +import io.micronaut.http.filter.HttpClientFilter; +import lombok.extern.slf4j.Slf4j; +import org.reactivestreams.Publisher; +import reactor.core.publisher.Mono; + +import java.util.Map; +import java.util.Optional; + +/** + * GraphQL calls return 200 even if errors occur. This filter marks the response as a failure and maps the server's + * error message to an{@link HttpClientResponseException}. This does not change the status code. + * + * @author jonathan zollinger + * @since 0.1.0 + */ +@Filter("/**/graphql") +@Slf4j +public class GraphQLErrorClientFilter implements HttpClientFilter { + + @Override + public Publisher> doFilter(MutableHttpRequest request, ClientFilterChain chain) { + + return Mono.from(chain.proceed(request)).map(response -> { + Optional bodyOpt = response.getBody(Map.class); + + if (bodyOpt.isPresent()) { + Map body = bodyOpt.get(); + String err = "errors"; + if (body.containsKey(err) && body.get(err) != null) { + Object errors = body.get(err); + String errorMessage = "GraphQL returned errors: " + errors.toString(); + throw new HttpClientResponseException(errorMessage, response); + } + log.debug("GraphQL request contains no errors"); + } + return response; + }); + } +} \ No newline at end of file diff --git a/core/src/main/java/org/justserve/client/ProjectClient.java b/core/src/main/java/org/justserve/client/ProjectClient.java new file mode 100644 index 0000000..aa3c2ba --- /dev/null +++ b/core/src/main/java/org/justserve/client/ProjectClient.java @@ -0,0 +1,76 @@ +package org.justserve.client; + +import io.micronaut.http.HttpResponse; +import io.micronaut.http.annotation.*; +import io.micronaut.core.annotation.*; +import io.micronaut.http.client.annotation.Client; +import org.justserve.model.*; +import reactor.core.publisher.Mono; + +import java.util.UUID; +import io.micronaut.retry.annotation.Retryable; +import jakarta.annotation.Generated; +import jakarta.validation.Valid; +import jakarta.validation.constraints.*; + +@Generated("io.micronaut.openapi.generator.JavaMicronautClientCodegen") +@Retryable +@Client("justserve") +public interface ProjectClient { + + /** + * Assigns an organization to a project. + * + * @param id ID of the project (required) + * @param organizationId ID of the organization to assign (required) + * + * @return OK (status code 200) + */ + @Put("/api/v1/projects/{id}/organization/{organizationId}/assign") + Mono> assignOrganizationToProject( + @PathVariable("id") @NotNull UUID id, + @PathVariable("organizationId") @NotNull UUID organizationId + ); + + /** + * Get project details for a given project + * + * @param id (required) + * @param locale (required) + * @param getProjectRequest (optional) + * + * @return OK (status code 200) + */ + @Post("/api/v1/projects/{id}/{locale}") + Mono<@Valid Project> getProject( + @PathVariable("id") @NotNull UUID id, + @PathVariable("locale") @NotNull String locale, + @Body @Nullable @Valid GetProjectRequest getProjectRequest + ); + + /** + * Reassigns multiple projects to a new user. + * + * @param projectId ID of the project to be reassigned (required) + * @param reassignProjectRequest (optional) + * + * @return OK (status code 200) + */ + @Put("/api/v1/projects/{projectId}/users/reassignAndDelete") + Mono> reassignProject( + @PathVariable("projectId") @NotNull UUID projectId, + @Body @Nullable @Valid ReassignProjectRequest reassignProjectRequest + ); + + /** + * search active projects + * + * @param projectSearchRequest (optional) + * + * @return OK (status code 200) + */ + @Post("/api/v2/projects/search") + Mono<@Valid ProjectSearchResponse> searchProjects( + @Body @Nullable @Valid ProjectSearchRequest projectSearchRequest + ); +} \ No newline at end of file diff --git a/core/src/main/java/org/justserve/client/RetryClientFilter.java b/core/src/main/java/org/justserve/client/RetryClientFilter.java new file mode 100644 index 0000000..735c98f --- /dev/null +++ b/core/src/main/java/org/justserve/client/RetryClientFilter.java @@ -0,0 +1,51 @@ +package org.justserve.client; + +import io.micronaut.context.annotation.Value; +import io.micronaut.http.HttpResponse; +import io.micronaut.http.MutableHttpRequest; +import io.micronaut.http.annotation.Filter; +import io.micronaut.http.client.exceptions.HttpClientResponseException; +import io.micronaut.http.filter.ClientFilterChain; +import io.micronaut.http.filter.HttpClientFilter; +import org.reactivestreams.Publisher; +import reactor.core.publisher.Mono; +import reactor.util.retry.Retry; + +import java.time.Duration; + +/** + * Adds a retry to any 500 errors. The micronaut generator doesn't support this yet, so I'm adding it here instead + *
    + * You can control the retry behavior by setting the {@code micronaut.http.client.retry-attempts} + * and {@code micronaut.http.client.retry-timeout} environment variables or configuration properties. + * The default retry count is 3 and the default retry timeout is 1 second. + * + * @since 0.1.0 + * @author jonathan zollinger + */ +@Filter("/**") +public class RetryClientFilter implements HttpClientFilter { + + @Value("${micronaut.http.client.retry-attempts:3}") + int retryAttempts; + + @Value("${micronaut.http.client.retry-timeout:1s}") + Duration retryTimeout; + + @Override + public Publisher> doFilter(MutableHttpRequest request, ClientFilterChain chain) { + + return Mono.from(chain.proceed(request)) + .retryWhen(Retry.backoff(retryAttempts, retryTimeout) + .filter(throwable -> { + if (throwable instanceof HttpClientResponseException e) { + return 500 == e.getStatus().getCode(); + } + return true; + }) + .onRetryExhaustedThrow((retryBackoffSpec, retrySignal) -> + retrySignal.failure() + ) + ); + } +} \ No newline at end of file diff --git a/core/src/main/java/org/justserve/model/CivicGeography.java b/core/src/main/java/org/justserve/model/CivicGeography.java new file mode 100644 index 0000000..ca41cc1 --- /dev/null +++ b/core/src/main/java/org/justserve/model/CivicGeography.java @@ -0,0 +1,17 @@ +package org.justserve.model; + +import io.micronaut.core.annotation.Introspected; +import io.micronaut.serde.annotation.Serdeable; +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * This class is currently a placeholder for a future work. + * This class does nothing. + */ +@Data +@Accessors(chain = true) +@Serdeable +@Introspected +public class CivicGeography { +} diff --git a/core/src/main/java/org/justserve/model/EventType.java b/core/src/main/java/org/justserve/model/EventType.java new file mode 100644 index 0000000..9cfae0e --- /dev/null +++ b/core/src/main/java/org/justserve/model/EventType.java @@ -0,0 +1,88 @@ +package org.justserve.model; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonValue; +import io.micronaut.serde.annotation.Serdeable; +import lombok.Generated; +import lombok.RequiredArgsConstructor; + +import java.util.Arrays; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; + +/** + * Defines the scheduling model for a JustServe project, determining how its + * {@link ProjectEvent}s are structured and displayed. + * + * @author Jonathan Zollinger + * @since 0.1.0 + */ +@RequiredArgsConstructor +@Serdeable +public enum EventType { + /** + *

    Date, Time, and Location

    + * A standard event that occurs at a specific time and place. + */ + DTL(1, "DTL"), + + /** + *

    Ongoing

    + * An event with no specific time. The start and end dates determine visibility on JustServe + */ + Ongoing(2, "ONGOING"), + + /** + *

    Recurring

    + * An event that repeats on a regular schedule, such as weekly or monthly. + *

    Example: An evening opportunity that occurs every Monday, Wednesday, + * and Friday for three months. + */ + Recurring(3, "RECURRING"), + + /** + *

    Multiple Date, Time, and Location

    + * A complex event that has multiple, distinct shifts or occurrences. + *

    Example: A project with multiple shifts on each Saturday for several weeks. + */ + MultipleDTL(4, "MULTIPLE_DTL"); + + public static final Map VALUE_MAPPING = Map.copyOf(Arrays.stream(values()) + .collect(Collectors.toMap(v -> v.intValue, Function.identity()))); + + private final Integer intValue; + private final String stringValue; + + @Override + public String toString() { + return String.valueOf(intValue); + } + + @JsonValue + public String getStringValue() { + return stringValue; + } + + /** + * Parses the incoming value to either the string or integer value, whichever the server is using. + * + * @param value the incoming value from the server + * @return the event type that matches the incoming value + */ + @Generated //manually placed annotation to tell jacoco coverage report to ignore this + @JsonCreator + public static EventType fromValue(Object value) { + if (value instanceof Number) { + int intVal = ((Number) value).intValue(); + for (EventType type : values()) { + if (type.intValue == intVal) return type; + } + } else if (value instanceof String strVal) { + for (EventType type : values()) { + if (type.stringValue.equalsIgnoreCase(strVal)) return type; + } + } + throw new IllegalArgumentException("Unexpected value '" + value + "' for EventType"); + } +} diff --git a/core/src/main/java/org/justserve/model/GetProjectRequest.java b/core/src/main/java/org/justserve/model/GetProjectRequest.java new file mode 100644 index 0000000..3169847 --- /dev/null +++ b/core/src/main/java/org/justserve/model/GetProjectRequest.java @@ -0,0 +1,37 @@ +package org.justserve.model; + +import lombok.AllArgsConstructor; +import lombok.NoArgsConstructor; +import lombok.Data; +import lombok.experimental.Accessors; +import com.fasterxml.jackson.annotation.*; +import io.micronaut.serde.annotation.Serdeable; +import io.micronaut.core.annotation.Nullable; + +/** + * GetProjectRequest + */ +@Accessors(chain = true) +@NoArgsConstructor +@AllArgsConstructor +@Data +@Serdeable +public class GetProjectRequest { + + @Nullable + @JsonInclude(JsonInclude.Include.USE_DEFAULTS) + private String latitude; + + @Nullable + @JsonInclude(JsonInclude.Include.USE_DEFAULTS) + private String longitude; + + @Nullable + @JsonInclude(JsonInclude.Include.USE_DEFAULTS) + private String postalCode; + + @Nullable + @JsonInclude(JsonInclude.Include.USE_DEFAULTS) + private String lang; + +} \ No newline at end of file diff --git a/core/src/main/java/org/justserve/model/ProjectEvent.java b/core/src/main/java/org/justserve/model/ProjectEvent.java new file mode 100644 index 0000000..d39eed6 --- /dev/null +++ b/core/src/main/java/org/justserve/model/ProjectEvent.java @@ -0,0 +1,293 @@ +package org.justserve.model; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.micronaut.core.annotation.Introspected; +import io.micronaut.core.annotation.NonNull; +import io.micronaut.core.annotation.Nullable; +import io.micronaut.serde.annotation.Serdeable; +import jakarta.validation.constraints.Email; +import jakarta.validation.constraints.Size; +import lombok.*; +import lombok.experimental.Accessors; +import org.justserve.model.graph.CreateEventMutation; +import org.justserve.model.graph.GraphFields; + +import java.util.Date; +import java.util.List; +import java.util.UUID; + +import static java.lang.Boolean.TRUE; + +/** + *

    JustServe Project Event

    + * Valid to use with + *
    • {@link EventType#Ongoing} + *
    • {@link EventType#DTL} + *
    • {@link EventType#MultipleDTL}
    + * (Not valid to use with{@link EventType#Recurring} events + * + *

    Creating New Events

    + * Use {@code ProjectEvent.}{@link #builder()} when adding a new event to ensure all + * needed fields are included. This not only checks for required fields, but double checks + * contradictions or invalid combinations are being submitted. + *
    Example
    + *
    {@code
    + * ProjectEvent newEvent = ProjectEvent.builder()
    + *     .start(startDate)
    + *     .end(endDate)
    + *     .shiftTitle("Morning Shift")
    + *     .build();
    + * }
    + * + *

    Updating Existing Events

    + * Use {@code new ProjectEvent()} (without the builder) when updating an event. This + * skips the builder's checks and lets you send partial updates to existing events. + *
    Example
    + *
    {@code
    + * ProjectEvent partialUpdate = new ProjectEvent()
    + *     .setShiftTitle("Afternoon Shift");
    + * }
    + * + * @author Jonathan Zollinger + * @since 0.1.0 + */ +@EqualsAndHashCode(callSuper = true) +@Data +@Accessors(chain = true) +@NoArgsConstructor +@AllArgsConstructor +@Builder(buildMethodName = "buildInternal") +@Serdeable +@Introspected +public class ProjectEvent extends GraphFields { + @Nullable + @Email + private String contactEmail; + + @Nullable + @Size(max = 139) + private String contactName; + + @Nullable + private String contactPhone; + + /** + *

    Whether the project event has been deleted.

    + * Not Usable In: + *
      + *
    • {@link CreateEventMutation}
    • + *
    + */ + @Nullable + private Boolean deleted; + + /** + *

    The user who deleted the project event.

    + * See{@link #deletedByNavigation}
    + * Not Usable In: + *
      + *
    • {@link CreateEventMutation}
    • + *
    + */ + @Nullable + private UUID deletedBy; + + /** + *

    User who deleted the event.

    + * See{@link #deletedBy}
    + * Not Usable In: + *
      + *
    • {@link CreateEventMutation}
    • + *
    + */ + @Nullable + private User deletedByNavigation; + + /** + *

    The date and time the project event was deleted.

    + * Not Usable In: + *
      + *
    • {@link CreateEventMutation}
    • + *
    + */ + @Nullable + @JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", timezone = "UTC") + private Date deletedOn; + + @Nullable + @JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", timezone = "UTC") + private Date end; + + /** + *

    The end date and time of the event with timezone offset.

    + * Not Usable In: + *
      + *
    • {@link CreateEventMutation}
    • + *
    + */ + @Nullable + @JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", timezone = "UTC") + private Date endDateTimeOffset; + + /** + *

    Indicates if the event capacity has been reached.

    + * Not Usable In: + *
      + *
    • {@link CreateEventMutation}
    • + *
    + */ + @Nullable + private Boolean eventCapReached; + + /** + * Whether a group cap is set for this event. + */ + @NonNull + @Builder.Default + private Boolean groupCap = false; + + /** + * The max number of people which can sign up by one person + */ + @Nullable + private Integer groupLimit; + + /** + *

    The unique identifier for the project event.

    + * Not Usable In: + *
      + *
    • {@link CreateEventMutation}
    • + *
    + */ + @Nullable + private UUID id; + + @Nullable + private String locationLink; + + @Nullable + @Size(max = 139) + private String locationName; + + /** + *

    The project this event belongs to.

    + * Not Usable In: + *
      + *
    • {@link CreateEventMutation}
    • + *
    + */ + @Nullable + private Project project; + + /** + *

    The location of the project event.

    + * Not Usable In: + *
      + *
    • {@link CreateEventMutation}
    • + *
    + */ + @Nullable + private ProjectEventLocation projectEventLocation; + + /** + *

    The ID of the project event location.

    + * Not Usable In: + *
      + *
    • {@link CreateEventMutation}
    • + *
    + */ + @Nullable + private UUID projectEventLocationId; + + /** + *

    The regions associated with the project event.

    + * Not Usable In: + *
      + *
    • {@link CreateEventMutation}
    • + *
    + */ + @Nullable + private List projectEventRegions; + + /** + *

    The ID of the project this event belongs to.

    + * Not Usable In: + *
      + *
    • {@link CreateEventMutation}
    • + *
    + */ + @Nullable + private UUID projectId; + + /** + *

    Information about the recurring schedule of the project event.

    + * Not Usable In: + *
      + *
    • {@link CreateEventMutation}
    • + *
    + */ + @Nullable + private ProjectRecurringTime projectRecurringTime; + + @Nullable + private String qrCodeImageLocation; + + /** + *

    The date the event is set to renew.

    + * Only Usable In: + *
      + *
    • {@link EventType#MultipleDTL}
    • + *
    + */ + @Nullable + @JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", timezone = "UTC") + private Date renewDate; + + @Nullable + @Size(max = 300) + private String schedule; + + @Nullable + @Size(max = 300) + private String shiftTitle; + + @Nullable + private String specialDirections; + + @Nullable + @JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", timezone = "UTC") + private Date start; + + @Nullable + private ProjectEventStatus status; + + @Nullable + private TimeZone timezone; + + @Nullable + private Integer totalVolunteersNeeded; + + /** + * whether a volunteer cap is set for this event. + */ + @Nullable + private Boolean volunteerCap; + + public static class ProjectEventBuilder { + public ProjectEvent build() { + ProjectEvent event = this.buildInternal(); + + if (event.getEnd() == null || event.getStart() == null) { + throw new IllegalStateException("Events created with the builder must have a start and end date"); + } + if ((TRUE.equals(event.getGroupCap()) && event.getGroupLimit() == null)) { + throw new IllegalStateException("groupLimit cannot be null when groupCap is true"); + } + if (TRUE.equals(event.getVolunteerCap()) && event.getTotalVolunteersNeeded() == null) { + throw new IllegalStateException("totalVolunteersNeeded cannot be null when volunteerCap is true"); + } + + return event; + } + } +} diff --git a/core/src/main/java/org/justserve/model/ProjectEventLocation.java b/core/src/main/java/org/justserve/model/ProjectEventLocation.java new file mode 100644 index 0000000..2b10965 --- /dev/null +++ b/core/src/main/java/org/justserve/model/ProjectEventLocation.java @@ -0,0 +1,17 @@ +package org.justserve.model; + +import io.micronaut.core.annotation.Introspected; +import io.micronaut.serde.annotation.Serdeable; +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * This class is currently a placeholder for a future work. + * This class does nothing. + */ +@Data +@Accessors(chain = true) +@Serdeable +@Introspected +public class ProjectEventLocation { +} diff --git a/core/src/main/java/org/justserve/model/ProjectEventStatus.java b/core/src/main/java/org/justserve/model/ProjectEventStatus.java new file mode 100644 index 0000000..aaed8aa --- /dev/null +++ b/core/src/main/java/org/justserve/model/ProjectEventStatus.java @@ -0,0 +1,64 @@ +package org.justserve.model; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonValue; +import io.micronaut.serde.annotation.Serdeable; +import lombok.Generated; +import lombok.RequiredArgsConstructor; + +import java.util.Arrays; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; + +/** + *

    Supported Project Event Status

    + *

    + * Project Status available to project events + * Use {@link ProjectStatus} + */ +@RequiredArgsConstructor +@Serdeable +public enum ProjectEventStatus { + ACTIVE(1, "ACTIVE"), + CANCELLED(2, "CANCELLED"), + ON_HOLD(3, "ON_HOLD"); + + public static final Map VALUE_MAPPING = Map.copyOf(Arrays.stream(values()) + .collect(Collectors.toMap(v -> v.intValue, Function.identity()))); + + private final Integer intValue; + private final String stringValue; + + @Override + public String toString() { + return String.valueOf(intValue); + } + + @JsonValue + public String getStringValue() { + return stringValue; + } + + /** + * Parses the incoming value to either the string or integer value, whichever the server is using. + * + * @param value the incoming value from the server + * @return the event type that matches the incoming value + */ + @Generated //manually placed annotation to tell jacoco coverage report to ignore this + @JsonCreator + public static ProjectEventStatus fromValue(Object value) { + if (value instanceof Number) { + int intVal = ((Number) value).intValue(); + for (ProjectEventStatus type : values()) { + if (type.intValue == intVal) return type; + } + } else if (value instanceof String strVal) { + for (ProjectEventStatus type : values()) { + if (type.stringValue.equalsIgnoreCase(strVal)) return type; + } + } + throw new IllegalArgumentException("Unexpected value '" + value + "' for ProjectEventStatus"); + } +} diff --git a/core/src/main/java/org/justserve/model/ProjectLocationType.java b/core/src/main/java/org/justserve/model/ProjectLocationType.java new file mode 100644 index 0000000..35bcf4d --- /dev/null +++ b/core/src/main/java/org/justserve/model/ProjectLocationType.java @@ -0,0 +1,62 @@ +package org.justserve.model; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonValue; +import io.micronaut.serde.annotation.Serdeable; +import lombok.Generated; +import lombok.RequiredArgsConstructor; + +import java.util.Arrays; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; + +/** + *

    Supported Location Types for Projects

    + * + */ +@RequiredArgsConstructor +@Serdeable +public enum ProjectLocationType { + SINGLE_LOCATION(1, "SINGLE_LOCATION"), + REGIONAL(3, "REGIONAL"), + REMOTE(4, "REMOTE"); + + public static final Map VALUE_MAPPING = Map.copyOf(Arrays.stream(values()) + .collect(Collectors.toMap(v -> v.intValue, Function.identity()))); + + private final Integer intValue; + private final String stringValue; + + @Override + public String toString() { + return String.valueOf(intValue); + } + + @JsonValue + public String getStringValue() { + return stringValue; + } + + /** + * Parses the incoming value to either the string or integer value, whichever the server is using. + * + * @param value the incoming value from the server + * @return the event type that matches the incoming value + */ + @Generated //manually placed annotation to tell jacoco coverage report to ignore this + @JsonCreator + public static ProjectLocationType fromValue(Object value) { + if (value instanceof Number) { + int intVal = ((Number) value).intValue(); + for (ProjectLocationType type : values()) { + if (type.intValue == intVal) return type; + } + } else if (value instanceof String strVal) { + for (ProjectLocationType type : values()) { + if (type.stringValue.equalsIgnoreCase(strVal)) return type; + } + } + throw new IllegalArgumentException("Unexpected value '" + value + "' for ProjectLocationType"); + } +} diff --git a/core/src/main/java/org/justserve/model/ProjectRecurringTime.java b/core/src/main/java/org/justserve/model/ProjectRecurringTime.java new file mode 100644 index 0000000..3d5782e --- /dev/null +++ b/core/src/main/java/org/justserve/model/ProjectRecurringTime.java @@ -0,0 +1,144 @@ +package org.justserve.model; + +import io.micronaut.core.annotation.Introspected; +import io.micronaut.core.annotation.Nullable; +import io.micronaut.serde.annotation.Serdeable; +import jakarta.validation.constraints.Email; +import jakarta.validation.constraints.Size; +import lombok.*; +import lombok.experimental.Accessors; +import org.justserve.model.graph.GraphFields; + +import java.util.List; +import java.util.UUID; + +import static java.lang.Boolean.TRUE; + +/** + *

    JustServe Project Recurring Time

    + * Valid to use with + *
      + *
    • {@link EventType#Recurring}
    • + *
    + * + *

    Creating New Recurring Events

    + * Use {@code ProjectRecurringTime.}{@link #builder()} when adding a new recurring event to ensure all + * needed fields are included and validated. + * + * @author Jonathan Zollinger + * @since 0.1.0 + */ +@EqualsAndHashCode(callSuper = true) +@Data +@Accessors(chain = true) +@NoArgsConstructor +@AllArgsConstructor +@Builder(buildMethodName = "buildInternal") +@Serdeable +@Introspected +public class ProjectRecurringTime extends GraphFields { + + @Nullable + @Email + private String contactEmail; + + @Nullable + @Size(max = 139) + private String contactName; + + @Nullable + private String contactPhone; + + @Nullable + private String startTime; + + @Nullable + private String endTime; + + @Builder.Default + private Boolean firstWeek = false; + + @Builder.Default + private Boolean secondWeek = false; + + @Builder.Default + private Boolean thirdWeek = false; + + @Builder.Default + private Boolean fourthWeek = false; + + @Builder.Default + private Boolean fifthWeek = false; + + @Builder.Default + private Boolean lastWeek = false; + + @Nullable + private Integer groupLimit; + + + @Nullable + private UUID id; + + @Nullable + private RecurringType recurringType; + + @Nullable + private List daysOfMonth; + + /** + *

    The days of the months a recurring event lands on.

    + * For example, a monthly recurring event landing on the 16th of the month: + * + */ + @Nullable + private List recurringDaysOfMonths; + + @Nullable + private UUID projectRecurringId; + + @Nullable + private String specialDirections; + + @Builder.Default + private Boolean volunteersCapped = false; + + @Nullable + private Integer totalVolunteersNeeded; + + @Nullable + private Integer volunteersNeeded; + + @Builder.Default + private Boolean monday = false; + + @Builder.Default + private Boolean tuesday = false; + + @Builder.Default + private Boolean wednesday = false; + + @Builder.Default + private Boolean thursday = false; + + @Builder.Default + private Boolean friday = false; + + @Builder.Default + private Boolean saturday = false; + + @Builder.Default + private Boolean sunday = false; + + + public static class ProjectRecurringTimeBuilder { + public ProjectRecurringTime build() { + ProjectRecurringTime event = this.buildInternal(); + if (TRUE.equals(event.getVolunteersCapped()) && event.getVolunteersNeeded() == null) { + throw new IllegalStateException("volunteersNeeded cannot be null when volunteersCapped is true"); + } + + return event; + } + } +} diff --git a/core/src/main/java/org/justserve/model/ProjectStatus.java b/core/src/main/java/org/justserve/model/ProjectStatus.java new file mode 100644 index 0000000..f4466ee --- /dev/null +++ b/core/src/main/java/org/justserve/model/ProjectStatus.java @@ -0,0 +1,70 @@ +package org.justserve.model; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonValue; +import io.micronaut.serde.annotation.Serdeable; +import lombok.Generated; +import lombok.RequiredArgsConstructor; + +import java.util.Arrays; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; + +/** + *

    Status for a project.

    + * + * Use{@link ProjectEventStatus} when creating a project events. + * + * @author Jonathan Zollinger + * @since 0.1.0 + */ +@RequiredArgsConstructor +@Serdeable +public enum ProjectStatus { + PUBLISHED(1, "PUBLISHED"), + SUBMITTED(2, "SUBMITTED"), + DRAFT(3, "DRAFT"), + TEMPLATE(4, "TEMPLATE"), + ON_HOLD(5, "ON_HOLD"), + CANCELLED(6, "CANCELLED"), + DECLINED(7, "DECLINED"); + + public static final Map VALUE_MAPPING = Map.copyOf(Arrays.stream(values()) + .collect(Collectors.toMap(v -> v.intValue, Function.identity()))); + + private final Integer intValue; + private final String stringValue; + + @Override + public String toString() { + return String.valueOf(intValue); + } + + @JsonValue + public String getStringValue() { + return stringValue; + } + + /** + * Parses the incoming value to either the string or integer value, whichever the server is using. + * + * @param value the incoming value from the server + * @return the event type that matches the incoming value + */ + @Generated //manually placed annotation to tell jacoco coverage report to ignore this + @JsonCreator + public static ProjectStatus fromValue(Object value) { + if (value instanceof Number) { + int intVal = ((Number) value).intValue(); + for (ProjectStatus type : values()) { + if (type.intValue == intVal) return type; + } + } else if (value instanceof String strVal) { + for (ProjectStatus type : values()) { + if (type.stringValue.equalsIgnoreCase(strVal)) return type; + } + } + throw new IllegalArgumentException("Unexpected value '" + value + "' for ProjectStatus"); + } +} diff --git a/core/src/main/java/org/justserve/model/ReassignProjectRequest.java b/core/src/main/java/org/justserve/model/ReassignProjectRequest.java new file mode 100644 index 0000000..58d68ca --- /dev/null +++ b/core/src/main/java/org/justserve/model/ReassignProjectRequest.java @@ -0,0 +1,44 @@ +package org.justserve.model; + +import java.util.UUID; +import lombok.AllArgsConstructor; +import lombok.NoArgsConstructor; +import lombok.Data; +import lombok.experimental.Accessors; +import com.fasterxml.jackson.annotation.*; +import io.micronaut.serde.annotation.Serdeable; +import io.micronaut.core.annotation.Nullable; +import jakarta.annotation.Generated; + +/** + * ReassignProjectRequest + */ +@Accessors(chain = true) +@NoArgsConstructor +@AllArgsConstructor +@Data + +@Serdeable +@Generated("io.micronaut.openapi.generator.JavaMicronautClientCodegen") +public class ReassignProjectRequest { + + public static final String JSON_PROPERTY_ASSIGN_ID = "assignId"; + public static final String JSON_PROPERTY_DELETE_ID = "deleteId"; + + /** + * UUID of the new owner of the project + */ + @Nullable + @JsonProperty(JSON_PROPERTY_ASSIGN_ID) + @JsonInclude(JsonInclude.Include.USE_DEFAULTS) + private UUID assignId; + + /** + * UUID of the previous owner of the project + */ + @Nullable + @JsonProperty(JSON_PROPERTY_DELETE_ID) + @JsonInclude(JsonInclude.Include.USE_DEFAULTS) + private UUID deleteId; + +} \ No newline at end of file diff --git a/core/src/main/java/org/justserve/model/RecurringType.java b/core/src/main/java/org/justserve/model/RecurringType.java new file mode 100644 index 0000000..5fc1e80 --- /dev/null +++ b/core/src/main/java/org/justserve/model/RecurringType.java @@ -0,0 +1,17 @@ +package org.justserve.model; + +import io.micronaut.core.annotation.Introspected; +import io.micronaut.serde.annotation.Serdeable; + +/** + * JustServe Project Recurring Type. + * + * @author Jonathan Zollinger + * @since 0.1.0 + */ +@Serdeable +@Introspected +public enum RecurringType { + WEEKLY, + MONTHLY +} diff --git a/core/src/main/java/org/justserve/model/TimeZone.java b/core/src/main/java/org/justserve/model/TimeZone.java new file mode 100644 index 0000000..33f95d4 --- /dev/null +++ b/core/src/main/java/org/justserve/model/TimeZone.java @@ -0,0 +1,214 @@ +package org.justserve.model; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonValue; +import io.micronaut.serde.annotation.Serdeable; +import lombok.Generated; +import lombok.RequiredArgsConstructor; + +import java.util.Arrays; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; + +/** + *

    TimeZones supported in JustServe

    + *
      + *
    • The queryValue field reflects the options in the UI (and what is sent to the server).
    • + *
    • The ResponseValue is the String which is returned from the server
    • + *
    + * + * @author Jonathan Zollinger + * @since 0.1.0 + */ +@RequiredArgsConstructor +@Serdeable +public enum TimeZone { + INTERNATIONAL_DATE_LINE_WEST(1, "(UTC-12:00) International Date Line West", "Dateline Standard Time"), + COORDINATED_UNIVERSAL_TIME_11(2, "(UTC-11:00) Coordinated Universal Time-11", "UTC-11"), + ALEUTIAN_ISLANDS(3, "(UTC-10:00) Aleutian Islands", "Aleutian Standard Time"), + HAWAII(4, "(UTC-10:00) Hawaii", "Hawaiian Standard Time"), + MARQUESAS_ISLANDS(5, "(UTC-09:30) Marquesas Islands", "Marquesas Standard Time"), + ALASKA(6, "(UTC-09:00) Alaska", "Alaskan Standard Time"), + COORDINATED_UNIVERSAL_TIME_09(7, "(UTC-09:00) Coordinated Universal Time-09", "UTC-09"), + BAJA_CALIFORNIA(8, "(UTC-08:00) Baja California", "Pacific Standard Time (Mexico)"), + COORDINATED_UNIVERSAL_TIME_08(9, "(UTC-08:00) Coordinated Universal Time-08", "UTC-08"), + PACIFIC_TIME_US_AND_CANADA(10, "(UTC-08:00) Pacific Time (US & Canada)", "Pacific Standard Time"), + ARIZONA(11, "(UTC-07:00) Arizona", "US Mountain Standard Time"), + LA_PAZ(12, "(UTC-07:00) La Paz", "Mountain Standard Time (Mexico)"), + MOUNTAIN_TIME_US_AND_CANADA(13, "(UTC-07:00) Mountain Time (US & Canada)", "Mountain Standard Time"), + YUKON(14, "(UTC-07:00) Yukon", "Yukon Standard Time"), + CENTRAL_AMERICA(15, "(UTC-06:00) Central America", "Central America Standard Time"), + CENTRAL_TIME_US_AND_CANADA(16, "(UTC-06:00) Central Time (US & Canada)", "Central Standard Time"), + EASTER_ISLAND(17, "(UTC-06:00) Easter Island", "Easter Island Standard Time"), + GUADALAJARA(18, "(UTC-06:00) Guadalajara", "Central Standard Time (Mexico)"), + SASKATCHEWAN(19, "(UTC-06:00) Saskatchewan", "Canada Central Standard Time"), + BOGOTA(20, "(UTC-05:00) Bogota", "SA Pacific Standard Time"), + CHETUMAL(21, "(UTC-05:00) Chetumal", "Eastern Standard Time (Mexico)"), + EASTERN_TIME_US_AND_CANADA(22, "(UTC-05:00) Eastern Time (US & Canada)", "Eastern Standard Time"), + HAITI(23, "(UTC-05:00) Haiti", "Haiti Standard Time"), + HAVANA(24, "(UTC-05:00) Havana", "Cuba Standard Time"), + INDIANA_EAST(25, "(UTC-05:00) Indiana (East)", "US Eastern Standard Time"), + TURKS_AND_CAICOS(26, "(UTC-05:00) Turks and Caicos", "Turks And Caicos Standard Time"), + ASUNCION(27, "(UTC-04:00) Asuncion", "Paraguay Standard Time"), + ATLANTIC_TIME_CANADA(28, "(UTC-04:00) Atlantic Time (Canada)", "Atlantic Standard Time"), + CARACAS(29, "Caracas", "Venezuela Standard Time"), + CUIABA(30, "(UTC-04:00) Cuiaba", "Central Brazilian Standard Time"), + GEORGETOWN(31, "(UTC-04:00) Georgetown", "SA Western Standard Time"), + SANTIAGO(32, "(UTC-04:00) Santiago", "Pacific SA Standard Time"), + NEWFOUNDLAND(33, "(UTC-03:30) Newfoundland", "Newfoundland Standard Time"), + ARAGUAINA(34, "(UTC-03:00) Araguaina", "Tocantins Standard Time"), + BRASILIA(35, "(UTC-03:00) Brasilia", "E. South America Standard Time"), + CAYENNE(36, "(UTC-03:00) Cayenne", "SA Eastern Standard Time"), + CITY_OF_BUENOS_AIRES(37, "(UTC-03:00) City of Buenos Aires", "Argentina Standard Time"), + MONTEVIDEO(38, "(UTC-03:00) Montevideo", "Montevideo Standard Time"), + PUNTA_ARENAS(39, "(UTC-03:00) Punta Arenas", "Magallanes Standard Time"), + SAINT_PIERRE_AND_MIQUELON(40, "(UTC-03:00) Saint Pierre and Miquelon", "Saint Pierre Standard Time"), + SALVADOR(41, "(UTC-03:00) Salvador", "Bahia Standard Time"), + COORDINATED_UNIVERSAL_TIME_02(42, "(UTC-02:00) Coordinated Universal Time-02", "UTC-02"), + GREENLAND(43, "(UTC-02:00) Greenland", "Greenland Standard Time"), + MID_ATLANTIC_OLD(44, "(UTC-02:00) Mid-Atlantic - Old", "Mid-Atlantic Standard Time"), + AZORES(45, "(UTC-01:00) Azores", "Azores Standard Time"), + CABO_VERDE_IS(46, "(UTC-01:00) Cabo Verde Is.", "Cape Verde Standard Time"), + COORDINATED_UNIVERSAL_TIME(47, "(UTC) Coordinated Universal Time", "UTC"), + DUBLIN(48, "(UTC+00:00) Dublin", "GMT Standard Time"), + MONROVIA(49, "(UTC+00:00) Monrovia", "Greenwich Standard Time"), + SAO_TOME(50, "(UTC+00:00) Sao Tome", "Sao Tome Standard Time"), + CASABLANCA(51, "(UTC+01:00) Casablanca", "Morocco Standard Time"), + AMSTERDAM(52, "(UTC+01:00) Amsterdam", "W. Europe Standard Time"), + BELGRADE(53, "(UTC+01:00) Belgrade", "Central Europe Standard Time"), + BRUSSELS(54, "(UTC+01:00) Brussels", "Romance Standard Time"), + SARAJEVO(55, "(UTC+01:00) Sarajevo", "Central European Standard Time"), + WEST_CENTRAL_AFRICA(56, "(UTC+01:00) West Central Africa", "W. Central Africa Standard Time"), + ATHENS(57, "(UTC+02:00) Athens", "GTB Standard Time"), + BEIRUT(58, "(UTC+02:00) Beirut", "Middle East Standard Time"), + CAIRO(59, "(UTC+02:00) Cairo", "Egypt Standard Time"), + CHISINAU(60, "(UTC+02:00) Chisinau", "E. Europe Standard Time"), + GAZA(61, "(UTC+02:00) Gaza", "West Bank Standard Time"), + HARARE(62, "(UTC+02:00) Harare", "South Africa Standard Time"), + HELSINKI(63, "(UTC+02:00) Helsinki", "FLE Standard Time"), + JERUSALEM(64, "(UTC+02:00) Jerusalem", "Israel Standard Time"), + JUBA(65, "(UTC+02:00) Juba", "South Sudan Standard Time"), + KALININGRAD(66, "(UTC+02:00) Kaliningrad", "Kaliningrad Standard Time"), + KHARTOUM(67, "(UTC+02:00) Khartoum", "Sudan Standard Time"), + TRIPOLI(68, "(UTC+02:00) Tripoli", "Libya Standard Time"), + WINDHOEK(69, "(UTC+02:00) Windhoek", "Namibia Standard Time"), + AMMAN(70, "(UTC+03:00) Amman", "Jordan Standard Time"), + BAGHDAD(71, "(UTC+03:00) Baghdad", "Arabic Standard Time"), + DAMASCUS(72, "(UTC+03:00) Damascus", "Syria Standard Time"), + ISTANBUL(73, "(UTC+03:00) Istanbul", "Turkey Standard Time"), + KUWAIT(74, "(UTC+03:00) Kuwait", "Arab Standard Time"), + MINSK(75, "(UTC+03:00) Minsk", "Belarus Standard Time"), + MOSCOW(76, "(UTC+03:00) Moscow", "Russian Standard Time"), + NAIROBI(77, "(UTC+03:00) Nairobi", "E. Africa Standard Time"), + VOLGOGRAD(78, "(UTC+03:00) Volgograd", "Volgograd Standard Time"), + TEHRAN(79, "(UTC+03:30) Tehran", "Iran Standard Time"), + ABU_DHABI(80, "(UTC+04:00) Abu Dhabi", "Arabian Standard Time"), + ASTRAKHAN(81, "(UTC+04:00) Astrakhan", "Astrakhan Standard Time"), + BAKU(82, "(UTC+04:00) Baku", "Azerbaijan Standard Time"), + IZHEVSK(83, "(UTC+04:00) Izhevsk", "Russia Time Zone 3"), + PORT_LOUIS(84, "(UTC+04:00) Port Louis", "Mauritius Standard Time"), + SARATOV(85, "(UTC+04:00) Saratov", "Samara Time"), + TBILISI(86, "(UTC+04:00) Tbilisi", "Georgian Standard Time"), + YEREVAN(87, "(UTC+04:00) Yerevan", "Caucasus Standard Time"), + KABUL(88, "(UTC+04:30) Kabul", "Afghanistan Standard Time"), + ASHGABAT(89, "(UTC+05:00) Ashgabat", "West Asia Standard Time"), + ASTANA(90, "(UTC+05:00) Astana", "Central Asia Standard Time"), + EKATERINBURG(91, "(UTC+05:00) Ekaterinburg", "Ekaterinburg Standard Time"), + ISLAMABAD(92, "(UTC+05:00) Islamabad", "Pakistan Standard Time"), + CHENNAI(93, "(UTC+05:30) Chennai", "India Standard Time"), + SRI_JAYAWARDENEPURA(94, "(UTC+05:30) Sri Jayawardenepura", "Sri Lanka Standard Time"), + KATHMANDU(95, "(UTC+05:45) Kathmandu", "Nepal Standard Time"), + BISHKEK(96, "(UTC+06:00) Bishkek", "Central Asia Standard Time"), + DHAKA(97, "(UTC+06:00) Dhaka", "Bangladesh Standard Time"), + OMSK(98, "(UTC+06:00) Omsk", "Omsk Standard Time"), + YANGON_RANGOON(99, "(UTC+06:30) Yangon (Rangoon)", "Myanmar Standard Time"), + BANGKOK(100, "(UTC+07:00) Bangkok", "SE Asia Standard Time"), + BARNAUL(101, "(UTC+07:00) Barnaul", "Altai Standard Time"), + HOVD(102, "(UTC+07:00) Hovd", "W. Mongolia Standard Time"), + KRASNOYARSK(103, "(UTC+07:00) Krasnoyarsk", "North Asia Standard Time"), + NOVOSIBIRSK(104, "(UTC+07:00) Novosibirsk", "N. Central Asia Standard Time"), + TOMSK(105, "(UTC+07:00) Tomsk", "Tomsk Standard Time"), + BEIJING(106, "(UTC+08:00) Beijing", "China Standard Time"), + IRKUTSK(107, "(UTC+08:00) Irkutsk", "North Asia East Standard Time"), + KUALA_LUMPUR(108, "(UTC+08:00) Kuala Lumpur", "Singapore Standard Time"), + PERTH(109, "(UTC+08:00) Perth", "W. Australia Standard Time"), + TAIPEI(110, "(UTC+08:00) Taipei", "Taipei Standard Time"), + ULAANBAATAR(111, "(UTC+08:00) Ulaanbaatar", "Ulaanbaatar Standard Time"), + EUCLA(112, "(UTC+08:45) Eucla", "Aus Central W. Standard Time"), + CHITA(113, "(UTC+09:00) Chita", "Transbaikal Standard Time"), + OSAKA(114, "(UTC+09:00) Osaka", "Tokyo Standard Time"), + PYONGYANG(115, "(UTC+09:00) Pyongyang", "North Korea Standard Time"), + SEOUL(116, "(UTC+09:00) Seoul", "Korea Standard Time"), + YAKUTSK(117, "(UTC+09:00) Yakutsk", "Yakutsk Standard Time"), + ADELAIDE(118, "(UTC+09:30) Adelaide", "Cen. Australia Standard Time"), + DARWIN(119, "(UTC+09:30) Darwin", "AUS Central Standard Time"), + BRISBANE(120, "(UTC+10:00) Brisbane", "E. Australia Standard Time"), + CANBERRA(121, "(UTC+10:00) Canberra", "AUS Eastern Standard Time"), + GUAM(122, "(UTC+10:00) Guam", "West Pacific Standard Time"), + HOBART(123, "(UTC+10:00) Hobart", "Tasmania Standard Time"), + VLADIVOSTOK(124, "(UTC+10:00) Vladivostok", "Vladivostok Standard Time"), + LORD_HOWE_ISLAND(125, "(UTC+10:30) Lord Howe Island", "Lord Howe Standard Time"), + BOUGAINVILLE_ISLAND(126, "(UTC+11:00) Bougainville Island", "Bougainville Standard Time"), + CHOKURDAKH(127, "(UTC+11:00) Chokurdakh", "Russia Time Zone 10"), + MAGADAN(128, "(UTC+11:00) Magadan", "Magadan Standard Time"), + NORFOLK_ISLAND(129, "(UTC+11:00) Norfolk Island", "Norfolk Standard Time"), + SAKHALIN(130, "(UTC+11:00) Sakhalin", "Sakhalin Standard Time"), + SOLOMON_IS(131, "(UTC+11:00) Solomon Is.", "Central Pacific Standard Time"), + ANADYR(132, "(UTC+12:00) Anadyr", "Russia Time Zone 11"), + AUCKLAND(133, "(UTC+12:00) Auckland", "New Zealand Standard Time"), + COORDINATED_UNIVERSAL_TIME_12(134, "(UTC+12:00) Coordinated Universal Time+12", "UTC+12"), + FIJI(135, "(UTC+12:00) Fiji", "Fiji Standard Time"), + PETROPAVLOVSK_KAMCHATSKY_OLD(136, "(UTC+12:00) Petropavlovsk-Kamchatsky - Old", "Kamchatka Standard Time"), + CHATHAM_ISLANDS(137, "(UTC+12:45) Chatham Islands", "Chatham Islands Standard Time"), + COORDINATED_UNIVERSAL_TIME_13(138, "(UTC+13:00) Coordinated Universal Time+13", "UTC+13"), + NUKU_ALOFA(139, "(UTC+13:00) Nuku'alofa", "Tonga Standard Time"), + SAMOA(140, "(UTC+13:00) Samoa", "Samoa Standard Time"), + KIRITIMATI_ISLAND(141, "(UTC+14:00) Kiritimati Island", "Line Islands Standard Time"); + + public static final Map VALUE_MAPPING = Map.copyOf(Arrays.stream(values()) + .collect(Collectors.toMap(v -> v.intValue, Function.identity()))); + + /** + * This integer value is used for sending + */ + private final Integer intValue; + /** + * This string value is what is used when sending this enum TO the server + */ + private final String queryValue; + /** + * This string value is what is used when receiving this enum FROM the server + */ + private final String responseValue; + + @Override + @JsonValue + public String toString() { + return queryValue; + } + + /** + * Parses the incoming value to either the one of the string or integer value, whichever the server is using. + * + * @param value the incoming value from the server + * @return the event type that matches the incoming value + */ + @Generated //manually placed annotation to tell jacoco coverage report to ignore this + @JsonCreator + public static TimeZone fromValue(Object value) { + if (value instanceof Number) { + int intVal = ((Number) value).intValue(); + for (TimeZone type : values()) { + if (type.intValue == intVal) return type; + } + } else if (value instanceof String strVal) { + for (TimeZone type : values()) { + if (type.queryValue.equalsIgnoreCase(strVal) || type.responseValue.equalsIgnoreCase(strVal)) { + return type; + } + } + } + throw new IllegalArgumentException("Unexpected value '" + value + "' for TimeZone"); + } +} diff --git a/core/src/main/java/org/justserve/model/User.java b/core/src/main/java/org/justserve/model/User.java new file mode 100644 index 0000000..625d0b5 --- /dev/null +++ b/core/src/main/java/org/justserve/model/User.java @@ -0,0 +1,7 @@ +package org.justserve.model; + +import io.micronaut.serde.annotation.Serdeable; + +@Serdeable +public class User { +} diff --git a/core/src/main/java/org/justserve/model/graph/CreateEventMutation.java b/core/src/main/java/org/justserve/model/graph/CreateEventMutation.java new file mode 100644 index 0000000..563df3b --- /dev/null +++ b/core/src/main/java/org/justserve/model/graph/CreateEventMutation.java @@ -0,0 +1,41 @@ +package org.justserve.model.graph; + +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import io.micronaut.serde.annotation.Serdeable; + +/** + * Data Transfer Object for the {@code createEvent} GraphQL mutation. + * This class dynamically constructs the mutation query based on the non-null fields + * provided in the {@link CreateEventVariables}. + * + * @author Jonathan Zollinger + * @since 0.1.0 + */ +@Serdeable +@JsonPropertyOrder({"query", "variables"}) +public class CreateEventMutation extends GraphMutation { + + public CreateEventMutation(CreateEventVariables variables) { + this.query = """ + mutation createEvent($projectId: ID!, $projectEvent: UpdateProjectEventInput!) { + createEvent( + projectId: $projectId + projectEvent: $projectEvent + ) { + %s + } + } + """; + this.variables = variables; + } + + @Override + public CreateEventVariables getVariables() { + return (CreateEventVariables) super.getVariables(); + } + + @Override + public String getQuery() { + return String.format(query, getVariables().getProjectEvent().getMutationFields()); + } +} diff --git a/core/src/main/java/org/justserve/model/graph/CreateEventVariables.java b/core/src/main/java/org/justserve/model/graph/CreateEventVariables.java new file mode 100644 index 0000000..0c5ce9b --- /dev/null +++ b/core/src/main/java/org/justserve/model/graph/CreateEventVariables.java @@ -0,0 +1,28 @@ +package org.justserve.model.graph; + +import io.micronaut.serde.annotation.Serdeable; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; +import org.justserve.model.ProjectEvent; + +import java.util.UUID; + +/** + * Pojo to serialize the variables object passed with a createEvent mutation. + * + * @author Jonathan Zollinger + * @since 0.1.0 + */ +@EqualsAndHashCode(callSuper = true) +@Serdeable +@Data +@AllArgsConstructor +@NoArgsConstructor +@Accessors(chain = true) +public class CreateEventVariables extends GraphVariables { + private UUID projectId; + private ProjectEvent projectEvent; +} diff --git a/core/src/main/java/org/justserve/model/graph/CreateEventsData.java b/core/src/main/java/org/justserve/model/graph/CreateEventsData.java new file mode 100644 index 0000000..dac2b2e --- /dev/null +++ b/core/src/main/java/org/justserve/model/graph/CreateEventsData.java @@ -0,0 +1,43 @@ +package org.justserve.model.graph; + +import com.fasterxml.jackson.annotation.JsonAnySetter; +import com.fasterxml.jackson.annotation.JsonIgnore; +import io.micronaut.serde.annotation.Serdeable; +import lombok.Data; +import org.justserve.model.ProjectEvent; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * Parses the dynamic response from the createEvents GraphQL mutation. + * + * @author Jonathan Zollinger + * @since 0.1.0 + */ +@Serdeable +@Data +public class CreateEventsData { + + @JsonIgnore + private Map events = new HashMap<>(); + + @JsonAnySetter + public void addEvent(String key, ProjectEvent event) { + if (key != null && key.startsWith("event")) { + events.put(key, event); + } + } + + /** + * Helper to return all the dynamically parsed events as a single list. + * + * @return List of newly created events + */ + @JsonIgnore + public List getEventList() { + return new ArrayList<>(events.values()); + } +} diff --git a/core/src/main/java/org/justserve/model/graph/CreateEventsMutation.java b/core/src/main/java/org/justserve/model/graph/CreateEventsMutation.java new file mode 100644 index 0000000..e328834 --- /dev/null +++ b/core/src/main/java/org/justserve/model/graph/CreateEventsMutation.java @@ -0,0 +1,70 @@ +package org.justserve.model.graph; + +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import io.micronaut.serde.annotation.Serdeable; + +import java.util.List; +import java.util.stream.IntStream; + +/** + * Data Transfer Object for the {@code createEvents} GraphQL mutation. + * This class dynamically constructs the mutation query based on the + * events provided in the {@link CreateEventsVariables}. + * + * @author Jonathan Zollinger + * @since 0.1.0 + */ +@Serdeable +@JsonPropertyOrder({"query", "variables"}) +public class CreateEventsMutation extends GraphMutation { + + public CreateEventsMutation(CreateEventsVariables variables) { + if (variables.getProjectEvents().isEmpty()) { + throw new IllegalArgumentException("At least one event must be provided"); + } + this.query = buildQuery(variables); + this.variables = variables; + } + + private String buildQuery(CreateEventsVariables variables) { + StringBuilder args = new StringBuilder("$projectId: ID!"); + StringBuilder body = new StringBuilder(); + + List sortedKeys = variables.getProjectEvents().keySet().stream().sorted().toList(); + + IntStream.range(0, sortedKeys.size()).forEach(i -> { + String key = sortedKeys.get(i); + args.append(", $").append(key).append(": UpdateProjectEventInput!"); + body.append(String.format(""" + %s: createEvent( + projectId: $projectId + projectEvent: $%s + ) { + %%s + } + """, "event" + i, key)); + }); + + return String.format(""" + mutation createEvents(%s) { + %s} + """, args, body); + } + + @Override + public CreateEventsVariables getVariables() { + return (CreateEventsVariables) super.getVariables(); + } + + @Override + public String getQuery() { + CreateEventsVariables vars = getVariables(); + + List sortedKeys = vars.getProjectEvents().keySet().stream().sorted().toList(); + + Object[] fieldsArray = sortedKeys.stream().map(sortedKey -> vars.getProjectEvents().get(sortedKey) + .getMutationFields()).toArray(); + + return String.format(query, fieldsArray); + } +} diff --git a/core/src/main/java/org/justserve/model/graph/CreateEventsVariables.java b/core/src/main/java/org/justserve/model/graph/CreateEventsVariables.java new file mode 100644 index 0000000..d42c523 --- /dev/null +++ b/core/src/main/java/org/justserve/model/graph/CreateEventsVariables.java @@ -0,0 +1,46 @@ +package org.justserve.model.graph; + +import com.fasterxml.jackson.annotation.JsonAnyGetter; +import com.fasterxml.jackson.annotation.JsonIgnore; +import io.micronaut.serde.annotation.Serdeable; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import lombok.NonNull; +import lombok.experimental.Accessors; +import org.justserve.model.ProjectEvent; + +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; + +/** + * Pojo to serialize the variables object passed with a createEvents mutation. + * + * @author Jonathan Zollinger + * @since 0.1.0 + */ +@EqualsAndHashCode(callSuper = true) +@Serdeable +@Data +@NoArgsConstructor +@Accessors(chain = true) +public class CreateEventsVariables extends GraphVariables { + + private UUID projectId; + + @JsonIgnore + private Map projectEvents = new HashMap<>(); + + public CreateEventsVariables(UUID projectId, @NonNull ProjectEvent... events) { + this.projectId = projectId; + for (int i = 0; i < events.length; i++) { + this.projectEvents.put("projectEvent" + i, events[i]); + } + } + + @JsonAnyGetter + public Map getProjectEvents() { + return projectEvents; + } +} diff --git a/core/src/main/java/org/justserve/model/graph/CreateRecurringEventsData.java b/core/src/main/java/org/justserve/model/graph/CreateRecurringEventsData.java new file mode 100644 index 0000000..41fd297 --- /dev/null +++ b/core/src/main/java/org/justserve/model/graph/CreateRecurringEventsData.java @@ -0,0 +1,43 @@ +package org.justserve.model.graph; + +import com.fasterxml.jackson.annotation.JsonAnySetter; +import com.fasterxml.jackson.annotation.JsonIgnore; +import io.micronaut.serde.annotation.Serdeable; +import lombok.Data; +import org.justserve.model.ProjectRecurringTime; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * Parses the dynamic response from the createRecurringEvents GraphQL mutation. + * + * @author Jonathan Zollinger + * @since 0.1.0 + */ +@Serdeable +@Data +public class CreateRecurringEventsData { + + @JsonIgnore + private Map events = new HashMap<>(); + + @JsonAnySetter + public void addEvent(String key, ProjectRecurringTime event) { + if (key != null && key.startsWith("event")) { + events.put(key, event); + } + } + + /** + * Helper to return all the dynamically parsed events as a single list. + * + * @return List of newly created recurring events + */ + @JsonIgnore + public List getEventList() { + return new ArrayList<>(events.values()); + } +} diff --git a/core/src/main/java/org/justserve/model/graph/CreateRecurringEventsMutation.java b/core/src/main/java/org/justserve/model/graph/CreateRecurringEventsMutation.java new file mode 100644 index 0000000..0c0127b --- /dev/null +++ b/core/src/main/java/org/justserve/model/graph/CreateRecurringEventsMutation.java @@ -0,0 +1,78 @@ +package org.justserve.model.graph; + +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import io.micronaut.serde.annotation.Serdeable; +import org.justserve.model.ProjectRecurringTime; + +import java.util.List; +import java.util.UUID; +import java.util.stream.IntStream; + +/** + * Data Transfer Object for the {@code createRecurringEvents} GraphQL mutation. + * This class dynamically constructs the mutation query based on the + * events provided in the {@link CreateRecurringEventsVariables}. + * + * @author Jonathan Zollinger + * @since 0.1.0 + */ +@Serdeable +@JsonPropertyOrder({"query", "variables"}) +public class CreateRecurringEventsMutation extends GraphMutation { + + public CreateRecurringEventsMutation(UUID projectId, ProjectRecurringTime... events) { + this(new CreateRecurringEventsVariables(projectId, events)); + } + + public CreateRecurringEventsMutation(CreateRecurringEventsVariables variables) { + if (variables.getProjectEvents() == null || variables.getProjectEvents().isEmpty()) { + throw new IllegalArgumentException("At least one event must be provided"); + } + this.query = buildQuery(variables); + this.variables = variables; + } + + private String buildQuery(CreateRecurringEventsVariables variables) { + StringBuilder args = new StringBuilder("$projectId: ID!"); + StringBuilder body = new StringBuilder(); + + List sortedKeys = variables.getProjectEvents().keySet().stream().sorted().toList(); + + String template = """ + %s: addRecurringTime( + projectId: $projectId + recurringTime: $%s + ) { + %%s + } + """; + + IntStream.range(0, sortedKeys.size()).forEach(i -> { + String key = sortedKeys.get(i); + args.append(", $").append(key).append(": CreateProjectRecurringTimeInput!"); + body.append(String.format(template, "event" + i, key)); + }); + + return String.format(""" + mutation createRecurringEvents(%s) { + %s} + """, args, body); + } + + @Override + public CreateRecurringEventsVariables getVariables() { + return (CreateRecurringEventsVariables) super.getVariables(); + } + + @Override + public String getQuery() { + CreateRecurringEventsVariables vars = getVariables(); + + List sortedKeys = vars.getProjectEvents().keySet().stream().sorted().toList(); + + Object[] fieldsArray = sortedKeys.stream().map(sortedKey -> vars.getProjectEvents().get(sortedKey) + .getMutationFields()).toArray(); + + return String.format(query, fieldsArray); + } +} diff --git a/core/src/main/java/org/justserve/model/graph/CreateRecurringEventsVariables.java b/core/src/main/java/org/justserve/model/graph/CreateRecurringEventsVariables.java new file mode 100644 index 0000000..ebf9337 --- /dev/null +++ b/core/src/main/java/org/justserve/model/graph/CreateRecurringEventsVariables.java @@ -0,0 +1,46 @@ +package org.justserve.model.graph; + +import com.fasterxml.jackson.annotation.JsonAnyGetter; +import com.fasterxml.jackson.annotation.JsonIgnore; +import io.micronaut.serde.annotation.Serdeable; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import lombok.NonNull; +import lombok.experimental.Accessors; +import org.justserve.model.ProjectRecurringTime; + +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; + +/** + * Pojo to serialize the variables object passed with a createRecurringEvents mutation. + * + * @author Jonathan Zollinger + * @since 0.1.0 + */ +@EqualsAndHashCode(callSuper = true) +@Serdeable +@Data +@NoArgsConstructor +@Accessors(chain = true) +public class CreateRecurringEventsVariables extends GraphVariables { + + private UUID projectId; + + @JsonIgnore + private Map projectEvents = new HashMap<>(); + + public CreateRecurringEventsVariables(UUID projectId, @NonNull ProjectRecurringTime... events) { + this.projectId = projectId; + for (int i = 0; i < events.length; i++) { + this.projectEvents.put("projectEvent" + i, events[i]); + } + } + + @JsonAnyGetter + public Map getProjectEvents() { + return projectEvents; + } +} diff --git a/core/src/main/java/org/justserve/model/graph/GraphFields.java b/core/src/main/java/org/justserve/model/graph/GraphFields.java new file mode 100644 index 0000000..0d092c1 --- /dev/null +++ b/core/src/main/java/org/justserve/model/graph/GraphFields.java @@ -0,0 +1,52 @@ +package org.justserve.model.graph; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import io.micronaut.core.annotation.Introspected; +import io.micronaut.core.beans.BeanIntrospection; +import io.micronaut.core.beans.BeanIntrospector; +import io.micronaut.core.naming.Named; +import io.micronaut.serde.annotation.Serdeable; + +import java.util.stream.Collectors; + +/** + *

    Fields used in a graphql mutation.

    + * These are the fields used in{@link GraphMutation#query} fields. + * + * @author Jonathan Zollinger + * @since 0.1.0 + */ +@Introspected +@Serdeable +public class GraphFields { + + @JsonIgnore + protected String getMutationFields() { + return getFieldsForBean(this); + } + + /** + * Reflection free implementation of querying non-null fields for a bean. + * + * @param bean class which is being queried + * @param class type + * @return all fields that are not null + */ + private static String getFieldsForBean(T bean) { + @SuppressWarnings("unchecked") + Class beanClass = (Class) bean.getClass(); + BeanIntrospection introspection = BeanIntrospector.SHARED.getIntrospection(beanClass); + + return introspection.getBeanProperties().stream() + .filter(prop -> !prop.getName().equals("mutationFields")) + .filter(prop -> { + try { + return prop.get(bean) != null; + } catch (Exception e) { + return false; + } + }) + .map(Named::getName) + .collect(Collectors.joining("\n ")); + } +} diff --git a/core/src/main/java/org/justserve/model/graph/GraphMutation.java b/core/src/main/java/org/justserve/model/graph/GraphMutation.java new file mode 100644 index 0000000..e9afc71 --- /dev/null +++ b/core/src/main/java/org/justserve/model/graph/GraphMutation.java @@ -0,0 +1,80 @@ +package org.justserve.model.graph; + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import io.micronaut.serde.annotation.Serdeable; +import jakarta.validation.constraints.Pattern; +import lombok.Getter; +import org.justserve.client.GraphQLClient; + +/** + * Abstract base class used to serialize the JSON payload sent via the{@link GraphQLClient} + * for GraphQL operations. + * + * @author Jonathan Zollinger + * @since 0.1.0 + */ +@Serdeable +@Getter +@JsonPropertyOrder({"query", "variables"}) +public abstract class GraphMutation { + /** + *

    Mutation Query String

    formatted to receive a (@code \n) delimited string of variable names.
    + * The query is to include the mutation's signature, as well as its opening and closing curly braces.
    + *
    Example:
    {@code "mutation ($projectId: ID!, $attachmentId: ID!) {\\n %s\\n}" } + */ + //"^mutation\\b[\\s\\S]*\\{[\\s\\S]*%s[\\s\\S]*\\}$" + @Pattern(regexp = "^mutation.*\\{.*%s.*}.*", message = "Query must begin with 'mutation' and include a '%s' placeholder") + String query; + + @JsonProperty("variables") + GraphVariables variables; + + /** + *

    {@summary Gets the query string used in this mutation object.}

    + * Produces the dynamic string used for the mutation. Fields with null values are not included in the query. + *
    Example:
    + * {@code getQuery} would return this string if the variables include non-null values for id, projectId, contactEmail, + * contactName, contactPhone, start and end.
    + *
    +     * mutation createEvent($projectId: ID!, $projectEvent: UpdateProjectEventInput!) {
    +     *      createEvent(
    +     *          projectId: $projectId
    +     *          projectEvent: $projectEvent
    +     *      ) {
    +     *          id
    +     *          projectId
    +     *          contactEmail
    +     *          contactName
    +     *          contactPhone
    +     *          start
    +     *          end
    +     *      }
    +     * }
    +     * 
    + *

    + * {@code getQuery} would return this string if the variables did not include non-null values for the contact + * information: + * + *

    +     * mutation createEvent($projectId: ID!, $projectEvent: UpdateProjectEventInput!) {
    +     *      createEvent(
    +     *          projectId: $projectId
    +     *          projectEvent: $projectEvent
    +     *      ) {
    +     *          id
    +     *          projectId
    +     *          start
    +     *          end
    +     *      }
    +     * }
    +     * 
    + * + *

    NOTE

    + * Only the value property names values are provided in this part of the query. See{@link GraphFields#getMutationFields()} + * + * @return The entire graphql mutation string. + * + */ + public abstract String getQuery(); +} diff --git a/core/src/main/java/org/justserve/model/graph/GraphQLResponse.java b/core/src/main/java/org/justserve/model/graph/GraphQLResponse.java new file mode 100644 index 0000000..d77a1d4 --- /dev/null +++ b/core/src/main/java/org/justserve/model/graph/GraphQLResponse.java @@ -0,0 +1,31 @@ +package org.justserve.model.graph; + +import io.micronaut.serde.annotation.Serdeable; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +/** + *

    GraphQL Response

    + * A generic wrapper for GraphQL API responses, containing the data payload and any execution errors. + * + * @param Underlying response object + * @author Jonathan Zollinger + * @since 0.1.0 + */ +@Serdeable +@Data +@NoArgsConstructor +@AllArgsConstructor +public class GraphQLResponse { + + private T data; + + private List errors; + + public boolean hasErrors() { + return errors != null && !errors.isEmpty(); + } +} diff --git a/core/src/main/java/org/justserve/model/graph/GraphVariables.java b/core/src/main/java/org/justserve/model/graph/GraphVariables.java new file mode 100644 index 0000000..92708c7 --- /dev/null +++ b/core/src/main/java/org/justserve/model/graph/GraphVariables.java @@ -0,0 +1,14 @@ +package org.justserve.model.graph; + +import io.micronaut.serde.annotation.Serdeable; + +/** + * Parent class to any variables to be used in a{@link GraphMutation#variables} setting. + * + * @author Jonathan Zollinger + * @since 0.1.0 + */ +@Serdeable +public class GraphVariables { + +} diff --git a/core/src/main/resources/application.yml b/core/src/main/resources/application.yml new file mode 100644 index 0000000..13e176b --- /dev/null +++ b/core/src/main/resources/application.yml @@ -0,0 +1,29 @@ +micronaut: + application: + name: justserve devkit core + http: + services: + justserve: + url: https://www.justserve.org + client: + read-timeout: 20s + connect-timeout: 5s + request-timeout: 30s + retryAttempts: 3 + retry-timeout: 1s + pool: + enabled: true + acquire-timeout: 30s + max-connections: 100 + codec: + json: + additional-types: + - application/graphql-response+json +justserve: + token: ${:i-need-to-be-defined} +jackson: + deserialization: + ACCEPT_EMPTY_STRING_AS_NULL_OBJECT: true +logger: + levels: +# org.justserve.auth.JustServeClientFilter: DEBUG \ No newline at end of file diff --git a/src/main/resources/logback.xml b/core/src/main/resources/logback.xml similarity index 91% rename from src/main/resources/logback.xml rename to core/src/main/resources/logback.xml index b1bec03..66538dd 100644 --- a/src/main/resources/logback.xml +++ b/core/src/main/resources/logback.xml @@ -8,7 +8,7 @@ - + - \ No newline at end of file + diff --git a/src/main/resources/schema.yml b/core/src/main/resources/schema.yml similarity index 65% rename from src/main/resources/schema.yml rename to core/src/main/resources/schema.yml index f23e0b4..16ed23d 100644 --- a/src/main/resources/schema.yml +++ b/core/src/main/resources/schema.yml @@ -71,137 +71,39 @@ paths: 200: description: OK content: { application/json: { schema: { type: array, items: { $ref: '#/components/schemas/UserSlimSearchResult' } } } } - /api/v2/projects/search: - post: - tags: [ Project ] - description: search active projects - operationId: searchProjects - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/ProjectSearchRequest' - responses: - '200': - description: OK - content: - application/json: - schema: - $ref: '#/components/schemas/ProjectSearchResponse' - /api/v1/projects/{id}/{locale}: + /api/v1/users: post: - tags: [ Project ] - description: Get project details for a given project - operationId: getProject - parameters: - - name: id - in: path - required: true - schema: { type: string, format: uuid } - - name: locale - in: path - required: true - schema: { type: string } + description: Register a new user on JustServe + operationId: createUser + tags: + - User requestBody: content: - application/json: + multipart/form-data: schema: type: object properties: - latitude: + FirstName: + maxLength: 50 + minLength: 1 type: string - longitude: + LastName: + maxLength: 50 + minLength: 1 type: string - postalCode: + Email: + pattern: "^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,4}$" type: string - lang: + Password: + maxLength: 100 + minLength: 8 type: string - responses: - '200': - description: OK - content: - application/json: - schema: - $ref: '#/components/schemas/Project' - /api/v1/projects/{projectId}/users/reassignAndDelete: - put: - tags: [ Project ] - description: Reassigns multiple projects to a new user. - operationId: reassignProject - parameters: - - name: projectId - in: path - description: ID of the project to be reassigned - required: true - schema: { type: string, format: uuid } - requestBody: - content: - application/json: - schema: - type: object - properties: - assignId: { type: string, format: UUID, description: "UUID of the new owner of the project" } - deleteId: { type: string, format: UUID, description: "UUID of the previous owner of the project" } - additionalProperties: false - responses: - '200': - description: OK - content: - application/json: - schema: - type: null - /api/v1/users: - post: - description: Register a new user on JustServe - operationId: createUser - tags: - - User - parameters: - - name: FirstName - in: query - required: true - schema: - maxLength: 50 - minLength: 1 - type: string - - name: LastName - in: query - required: true - schema: - maxLength: 50 - minLength: 1 - type: string - - name: Email - in: query - required: true - schema: - pattern: "^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,4}$" - type: string - - name: Password - in: query - required: true - schema: - maxLength: 100 - minLength: 8 - type: string - format: password - - name: Postal - in: query - schema: - type: string - - name: Language - description: language locale, ie 'en-us' - in: query - schema: - type: string - - name: Country - in: query - schema: - type: string - - name: CountryCode - in: query - schema: - type: string + format: password + Postal: { type: string } + Language: { type: string, description: "language locale, ie 'en-us'" } + Country: { type: string } + CountryCode: { type: string } + termsChecked: { type: boolean } responses: '200': description: OK @@ -293,6 +195,32 @@ paths: '500': description: Internal Server Error content: { application/json: { schema: { $ref: '#/components/schemas/ProblemDetails' } } } + /api/v1/users/{userId}/bounded: + get: + tags: [ User ] + description: Get bounded user details + operationId: getAllUserInformation + parameters: + - name: userId + in: path + required: true + schema: { type: string, format: uuid } + - name: showLeads + in: query + schema: { type: boolean, default: true } + - name: showFull + in: query + schema: { type: boolean, default: true } + - name: levels + in: query + schema: { type: integer, format: int32, default: 1 } + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/UserResultBounded' /api/v1/routing/{url}: get: operationId: getOrgIdFromSlug @@ -309,6 +237,184 @@ paths: components: schemas: + TimeZone: + type: string + GraphQLCreateEventData: + type: object + properties: + createEvent: + type: object + properties: + id: { type: string, format: uuid } + projectId: { type: string, format: uuid } + contactEmail: { type: string, format: email } + contactName: { type: string } + contactPhone: { type: string, format: phone } + start: { type: string, format: date-time } + end: { type: string, format: date-time } + groupCap: { type: boolean } + groupLimit: { type: integer, format: int32 } + timezone: { $ref: '#/components/schemas/TimeZone' } + totalVolunteersNeeded: { type: integer, format: int32 } + volunteerCap: { type: boolean } + GraphQLSearchOrganizationData: + type: object + properties: + adminOrganizationSearchByTitle: + type: array + items: + type: object + properties: + id: { type: string, format: uuid } + name: { type: string } + logo: { type: string } + description: { type: string } + contactName: { type: string } + contactPhone: { type: string, format: phone } + contactEmail: { type: string, format: email } + url: { type: string } + location: + type: object + properties: + displayCity: { type: string } + displayState: { type: string } + GraphQLUpdateProjectData: + type: object + properties: + updateProject: + type: object + properties: + id: { type: string, format: uuid } + logo: { type: string } + GraphQLSetProjectLocationData: + type: object + properties: + setProjectLocation: + type: object + properties: + displayAddress: { type: string } + displayAddress2: { type: string, nullable: true } + displayCity: { type: string } + displayCountry: { type: string } + displayCountryCode: { type: string } + displayCounty: { type: string } + displayNeighborhood: { type: string, nullable: true } + displayPostalCode: { type: string } + displayState: { type: string } + id: { type: string, format: uuid } + latitude: { type: number, format: double } + locationDetails: { type: string, nullable: true } + locationName: { type: string } + longitude: { type: number, format: double } + maxLatitude: { type: number, format: double } + maxLongitude: { type: number, format: double } + minLatitude: { type: number, format: double } + minLongitude: { type: number, format: double } + timezone: { type: string } + civicGeography: + type: object + properties: + state: + type: object + properties: + code: { type: string, nullable: true } + churchGeography: + type: object + properties: + areaUnitId: { type: string } + ccUnitId: { type: string } + missionUnitId: { type: string } + stakeUnitId: { type: string } + GraphQLAddProjectAttachmentData: + type: object + properties: + addProjectAttachment: + type: object + properties: + attachmentId: { type: string, format: uuid } + GraphQLAddProjectOrganizationData: + type: object + properties: + addProjectOrganization: + type: object + properties: + id: { type: string, format: uuid } + organizations: + type: array + items: + type: object + properties: + id: { type: string, format: uuid } + name: { type: string } + GraphQLCombinedMutationUpdateProjectAddProjectTagData: + type: object + properties: + updateProject: + type: object + properties: + id: { type: string, format: uuid } + wheelchairAccessible: { type: boolean } + itemDonations: { type: boolean } + indoors: { type: boolean } + longDescription: { type: string, maxLength: 2000 } + shortDescription: { type: string, maxLength: 300 } + sponsorUserId: { type: string, format: uuid } + groupProjects: { type: boolean } + additionalProperties: + type: object + properties: + id: { type: string, format: uuid } + tags: + type: array + items: + type: object + properties: + id: { type: integer, format: int32 } + tagType: { type: string } + tagTypeId: { type: integer, format: int32 } + translations: + type: array + items: + type: object + properties: + description: { type: string, nullable: true } + label: { type: string } + languageId: { type: integer, format: int32 } + GraphQLCreateProjectData: + type: object + properties: + createProject: + type: object + properties: + id: { type: string, format: uuid } + title: { type: string } + typeId: { type: integer, format: int32 } + locationTypeId: { type: integer, format: int32 } + externalVolunteerUrl: { type: string, nullable: true } + statusId: { type: integer, format: int32 } + GraphQLPublishProjectData: + type: object + properties: + publishProject: + type: object + properties: + id: { type: string, format: uuid } + statusId: { type: integer, format: int32 } + GraphQLUpdateProjectAttachmentData: + type: object + properties: + updateProjectAttachment: + type: object + properties: + attachmentId: { type: string, format: uuid } + GraphQLUpdateProjectListingData: + type: object + properties: + updateProjectListing: + type: object + properties: + id: { type: string, format: uuid } + unlisted: { type: boolean } BoundaryUpdateRequest: type: object properties: @@ -738,16 +844,17 @@ components: relativityScore: { type: number, format: double } additionalProperties: false ProjectStatus: - type: string - enum: - - None - - Published - - Submitted - - Draft - - Template - - OnHold - - Cancelled - - Declined + type: integer + format: int32 + enum: [ 1, 2, 3, 4, 5, 6, 7 ] + x-enum-varnames: + - PUBLISHED + - SUBMITTED + - DRAFT + - TEMPLATE + - ON_HOLD + - CANCELLED + - DECLINED UserSlimSearchResult: description: | high level information for a given user @@ -857,8 +964,8 @@ components: organizationType: { $ref: '#/components/schemas/OrganizationType' } title: { type: string, nullable: true } logo: { type: string, nullable: true } - url: { type: string, nullable: true } - internalURL: { type: string, nullable: true } + url: { type: string, nullable: true, description: "this provides only the url slug" } + internalURL: { type: string, nullable: true, description: "this currently returns null when an org is searched for by location" } website: { type: string, nullable: true } description: { type: string, nullable: true } contactName: { type: string, nullable: true } @@ -1092,32 +1199,6 @@ components: geoCodeOverride: type: boolean timezone: {} - required: - - mapId - - fullDisplayAddress - - address - - suite - - city - - civicCityId - - neighborhood - - county - - state - - postal - - country - - countryCode - - locationVisibilityId - - missionId - - ccId - - stakeId - - areaId - - latitude - - longitude - - maxLatitude - - minLatitude - - maxLongitude - - minLongitude - - geoCodeOverride - - timezone ownerLog: type: array items: {} @@ -1172,19 +1253,6 @@ components: type: number assignedOn: type: string - required: - - submitterUserId - - firstName - - lastName - - email - - phone - - postal - - applicantPostal - - applicantCity - - applicantCountry - - applicantCountryCode - - assignmentLevel - - assignedOn contact: type: object properties: @@ -1206,11 +1274,6 @@ components: type: string userId: type: string - required: - - name - - email - - phone - - userId representative: type: object properties: @@ -1231,24 +1294,12 @@ components: description: {} url: {} internalUrl: {} - organizationId: {} + organizationId: { type: string, format: uuid } reviewedBy: {} reviewedOn: {} linked: type: boolean logo: {} - required: - - authorization - - organizationAuthorization - - name - - description - - url - - internalUrl - - organizationId - - reviewedBy - - reviewedOn - - linked - - logo suitableAllAges: type: boolean groupProject: @@ -1386,31 +1437,6 @@ components: timezone: type: string required: - - mapId - - fullDisplayAddress - - address - - suite - - city - - civicCityId - - neighborhood - - county - - state - - postal - - country - - countryCode - - locationVisibilityId - - missionId - - ccId - - stakeId - - areaId - - latitude - - longitude - - maxLatitude - - minLatitude - - maxLongitude - - minLongitude - - geoCodeOverride - - timezone interested: type: array items: {} @@ -1433,20 +1459,6 @@ components: type: array items: {} required: - - id - - start - - renewDate - - end - - schedule - - scheduleLanguage - - specialDirections - - specialDirectionsLanguage - - locationName - - locationLink - - location - - interested - - contacts - - boundaries recurring: {} lastChangeReason: {} escalated: {} @@ -1490,77 +1502,437 @@ components: type: number underReview: type: boolean - required: - - id - - projectOwners - - projectOwnerLocation - - ownerLog - - projectType - - status - - publishDate - - language - - country - - title - - shortDescription - - longDescription - - logo - - attachments - - attachmentInfo - - applicant - - contact - - sponsor - - representative - - organization - - suitableAllAges - - groupProject - - volunteerRemotely - - itemDonations - - wheelchairAccessible - - indoors - - forYouthGroups - - volunteerFromAnywhere - - regionSelected - - temporaryFakeDistanceScore - - fakeDistanceScoreUpdate - - skills - - interests - - tools - - projectSkills - - projectInterests - - projectTools - - externalVolunteerURL - - isExternalProject - - isUnlistedProject - - archivedProject - - isActive - - externalVolunteerCount - - externalVolunteers - - allEventsFilled - - daysOfWeek - - timesOfDay - - waiverURL - - dtl - - onGoing - - recurring - - lastChangeReason - - escalated - - created - - updated - - createdBy - - deleted - - deletedOn - - deletedBy - - firstStartDateTimeOffset - - lastEndDateTimeOffset - - cbfName - - cblName - - updatedBy - - ubfName - - ublName - - volunteerCentersData - - relativityScore - - projectOwnerName - - projectOwnerLastName - - projectOwnerUserId - - projectLocationType - - underReview + UserResultBounded: + type: object + properties: + id: { type: string, nullable: true } + firstName: { type: string, nullable: true } + lastName: { type: string, nullable: true } + role: { $ref: '#/components/schemas/Role' } + isLead: { type: boolean } + email: { type: string, nullable: true } + phone: { type: string, nullable: true } + keywords: { type: string, nullable: true } + isActive: { type: boolean } + updatedBy: { $ref: '#/components/schemas/UpdatedBy' } + permissions: + type: array + items: { $ref: '#/components/schemas/BoundaryPermissionBounded' } + nullable: true + civicBoundaries: + type: array + items: { $ref: '#/components/schemas/GeographyBounded' } + nullable: true + churchBoundaries: + type: array + items: { $ref: '#/components/schemas/GeographyBounded' } + nullable: true + organizations: + type: array + items: { $ref: '#/components/schemas/OrganizationBounded' } + nullable: true + pendingOrganizations: + type: array + items: { $ref: '#/components/schemas/ProjectBounded' } + nullable: true + pendingProjects: + type: array + items: { $ref: '#/components/schemas/ProjectBounded' } + nullable: true + activeProjects: + type: array + items: { $ref: '#/components/schemas/ProjectBounded' } + nullable: true + historicalProjects: + type: array + items: { $ref: '#/components/schemas/ProjectBounded' } + nullable: true + draftProjects: + type: array + items: { $ref: '#/components/schemas/ProjectBounded' } + nullable: true + templateProjects: + type: array + items: { $ref: '#/components/schemas/ProjectBounded' } + nullable: true + additionalProperties: false + UpdatedBy: + type: object + properties: + name: { type: string, nullable: true } + boundaryName: { type: string, nullable: true } + role: { $ref: '#/components/schemas/Role' } + isLead: { type: boolean } + updatedDate: { type: string } # broken, returns year-zero instead of a meaningful date + additionalProperties: false + BoundaryPermissionBounded: + type: object + properties: + id: { type: string, nullable: true } + boundary: { type: string, nullable: true } + admins: + type: array + items: { $ref: '#/components/schemas/BoundaryAdminBounded' } + nullable: true + additionalProperties: false + BoundaryAdminBounded: + type: object + properties: + id: { type: string, nullable: true } + firstName: { type: string, nullable: true } + lastName: { type: string, nullable: true } + type: { $ref: '#/components/schemas/Role' } + additionalProperties: false + GeographyBounded: + type: object + properties: + id: { type: string, nullable: true } + name: { type: string, nullable: true } + type: { $ref: '#/components/schemas/GeographyType' } + civicCountryId: { type: string, nullable: true } + civicStateId: { type: string, nullable: true } + civicCountyId: { type: string, nullable: true } + civicCityId: { type: string, nullable: true } + additionalProperties: false + OrganizationBounded: + type: object + properties: + id: { type: string, nullable: true } + endorsements: + type: array + items: { $ref: '#/components/schemas/Endorsement' } + nullable: true + name: { type: string, nullable: true } + url: { type: string, nullable: true } + location: { $ref: '#/components/schemas/Location' } + status: { $ref: '#/components/schemas/OrganizationStatus' } + isLead: { type: boolean } + type: { $ref: '#/components/schemas/OrganizationType' } + additionalProperties: false + ProjectBounded: + type: object + properties: + id: { type: string, nullable: true } + name: { type: string, nullable: true } + projectOwners: + type: array + items: { $ref: '#/components/schemas/ProjectOwner' } + nullable: true + locations: + type: array + items: { $ref: '#/components/schemas/Location' } + nullable: true + status: { $ref: '#/components/schemas/ProjectStatus' } + organization: { $ref: '#/components/schemas/ProjectOrg' } + createdBy: { type: string, nullable: true } + cbfName: { type: string, nullable: true } + cblName: { type: string, nullable: true } + startDate: { type: string, format: date-time } + endDate: { type: string, format: date-time } + isActive: { type: boolean } + isUnlistedProject: { type: boolean } + ongoing: { type: boolean } + isDirectlyOwnedOrSponsored: { type: boolean } + isOwnedOrRepresentedViaOrganization: { type: boolean } + volunteersNeeded: { type: integer, format: int32 } + volunteersAcquired: { type: integer, format: int32 } + projectOwnerName: { type: string, nullable: true } + projectOwnerUserId: { type: string, nullable: true } + additionalProperties: false + ProjectOwner: + type: object + properties: + id: { type: string, nullable: true } + ownerType: { $ref: '#/components/schemas/OwnerType' } + additionalProperties: false + OwnerType: + type: integer + format: int32 + enum: [ 0, 1 ] + x-enum-varnames: + - User + - Organization + ProjectOrg: + type: object + properties: + authorization: { type: boolean } + organizationAuthorization: { type: boolean, nullable: true } + name: { type: string, nullable: true } + description: { type: string, nullable: true } + url: { type: string, nullable: true } + internalUrl: { type: string, nullable: true } + organizationId: { type: string, nullable: true } + reviewedBy: { type: string, nullable: true } + reviewedOn: { type: string, format: date-time, nullable: true } + linked: { type: boolean } + logo: { type: string, nullable: true } + additionalProperties: false + GraphQLAddProjectAttachmentRequest: + type: object + properties: + query: { type: string } + variables: { $ref: '#/components/schemas/GraphQLAddProjectAttachmentVariables' } + GraphQLAddProjectAttachmentVariables: + type: object + properties: + projectId: + type: string + format: uuid + attachmentId: + type: string + format: uuid + GraphQLAddProjectOrganizationRequest: + type: object + properties: + query: { type: string } + variables: { $ref: '#/components/schemas/GraphQLAddProjectOrganizationVariables' } + GraphQLAddProjectOrganizationVariables: + type: object + properties: + organizationId: + type: string + format: uuid + projectId: + type: string + format: uuid + GraphQLCombinedMutationUpdateProjectAddProjectTagRequest: + type: object + properties: + query: { type: string } + variables: { $ref: '#/components/schemas/GraphQLCombinedMutationUpdateProjectAddProjectTagVariables' } + GraphQLCombinedMutationUpdateProjectAddProjectTagVariables: + type: object + properties: + projectId: + type: string + format: uuid + modify: + type: object + properties: + indoors: + type: boolean + longDescription: + type: string + maxLength: 2000 + shortDescription: + type: string + maxLength: 300 + sponsorUserId: + type: string + format: uuid + suitableAllAges: + type: boolean + groupProjects: + type: boolean + itemDonations: + type: boolean + wheelchairAccessible: + type: boolean + sponsorType: + type: string + GraphQLCreateEventRequest: + type: object + properties: + query: { type: string } + variables: { $ref: '#/components/schemas/GraphQLCreateEventVariables' } + GraphQLCreateOngoingEventRequest: + type: object + properties: + query: { type: string } + variables: { $ref: '#/components/schemas/GraphQLCreateOngoingEventVariables' } + GraphQLCreateEventVariables: + type: object + properties: + id: + description: ID for the overall project + type: string + format: uuid + projectEvent: + type: object + properties: + contactEmail: + type: string + format: email + contactName: + type: string + contactPhone: + type: string + format: phone + end: + type: string + format: date-time + groupCap: + type: boolean + groupLimit: + type: integer + shiftTitle: + type: string + start: + type: string + format: date-time + timezone: + $ref: '#/components/schemas/TimeZone' + totalVolunteersNeeded: + type: integer + volunteerCap: + type: boolean + GraphQLCreateOngoingEventVariables: + type: object + properties: + id: + description: ID for the overall project + type: string + format: uuid + projectEvent: + type: object + properties: + contactEmail: + type: string + format: email + maxLength: 200 + contactName: + type: string + maxLength: 200 + contactPhone: + type: string + format: phone + maxLength: 139 + schedule: + type: string + maxLength: 100 # will be corrected to 300 + shiftTitle: + type: string + maxLength: 100 # will be corrected to 300 + + GraphQLCreateProjectRequest: + type: object + properties: + query: { type: string } + variables: { $ref: '#/components/schemas/GraphQLCreateProjectVariables' } + GraphQLCreateProjectVariables: + type: object + properties: + title: + type: string + eventType: + $ref: "EventType" + locationType: + $ref: "ProjectLocationType" + redirect: + type: string + GraphQLPublishProjectRequest: + type: object + properties: + query: { type: string } + variables: { $ref: '#/components/schemas/GraphQLPublishProjectVariables' } + GraphQLPublishProjectVariables: + type: object + properties: + projectId: + type: string + format: uuid + GraphQLSearchOrganizationRequest: + type: object + properties: + query: { type: string } + variables: { $ref: '#/components/schemas/GraphQLSearchOrganizationVariables' } + GraphQLSearchOrganizationVariables: + type: object + properties: + searchTerm: + minLength: 3 + maxLength: 100 + description: must not be null, and must be at least three characters long to avoid an exception + type: string + includeAll: + description: must not be null + type: boolean + GraphQLSetProjectLocationRequest: + type: object + properties: + query: { type: string } + variables: { $ref: '#/components/schemas/GraphQLSetProjectLocationVariables' } + GraphQLSetProjectLocationVariables: + type: object + properties: + projectId: + type: string + format: uuid + location: + type: string + locationData: + type: object + properties: + country: + type: string + countryCode: + type: string + state: + type: string + city: + type: string + county: + type: string + postal: + type: string + neighborhood: + type: string + latitude: + type: number + longitude: + type: number + address: + type: string + areaId: + type: string + ccId: + type: string + missionId: + type: string + stakeId: + type: string + locationDetails: + type: string + locationName: + type: string + GraphQLUpdateProjectAttachmentRequest: + type: object + properties: + query: { type: string } + variables: { $ref: '#/components/schemas/GraphQLUpdateProjectAttachmentVariables' } + GraphQLUpdateProjectAttachmentVariables: + type: object + properties: + attachmentId: + type: string + format: uuid + title: + type: string + description: + type: string + GraphQLUpdateProjectListingRequest: + type: object + properties: + query: { type: string } + variables: { $ref: '#/components/schemas/GraphQLUpdateProjectListingVariables' } + GraphQLUpdateProjectListingVariables: + type: object + properties: + projectId: + type: string + format: uuid + unlisted: + type: boolean + GraphQLUpdateProjectRequest: + type: object + properties: + query: { type: string } + variables: { $ref: '#/components/schemas/GraphQLUpdateProjectVariables' } + GraphQLUpdateProjectVariables: + type: object + properties: + projectId: + type: string + format: uuid + logo: + type: string diff --git a/core/src/main/resources/swagger.json b/core/src/main/resources/swagger.json new file mode 100644 index 0000000..528fc83 --- /dev/null +++ b/core/src/main/resources/swagger.json @@ -0,0 +1,38188 @@ +{ + "openapi": "3.0.1", + "info": { + "title": "JustServe API", + "description": "Some services require authentication - visit the root application and sign in - then return here to perform authenticated service calls", + "version": "v1" + }, + "paths": { + "/api/v1/project/{projectId}/attachment": { + "post": { + "tags": [ + "Attachment" + ], + "parameters": [ + { + "name": "projectId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "content": { + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.AttachmentUploadModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.AttachmentUploadModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.AttachmentUploadModel" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.AttachmentUploadModel" + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.AttachmentResult" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.AttachmentResult" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.AttachmentResult" + } + } + } + } + } + } + }, + "/api/v1/project/{projectId}/attachment/{id}": { + "delete": { + "tags": [ + "Attachment" + ], + "parameters": [ + { + "name": "projectId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.BoolResult" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.BoolResult" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.BoolResult" + } + } + } + } + } + } + }, + "/api/v1/project/{projectId}/attachment/remove/{id}": { + "delete": { + "tags": [ + "Attachment" + ], + "parameters": [ + { + "name": "projectId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.BoolResult" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.BoolResult" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.BoolResult" + } + } + } + } + } + } + }, + "/api/v1/attachment/{id}/info": { + "get": { + "tags": [ + "Attachment" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.AttachmentSlim" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.AttachmentSlim" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.AttachmentSlim" + } + } + } + } + } + } + }, + "/api/v1/attachment/{attachmentId}": { + "get": { + "tags": [ + "Attachment" + ], + "parameters": [ + { + "name": "attachmentId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK" + } + } + } + }, + "/api/v1/project/{projectId}/attachment/add/{attachmentId}": { + "post": { + "tags": [ + "Attachment" + ], + "parameters": [ + { + "name": "projectId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "attachmentId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Vanilla.Projects.ProjectAttachment" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Vanilla.Projects.ProjectAttachment" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Vanilla.Projects.ProjectAttachment" + } + } + } + } + } + } + }, + "/api/v1/boundaries/users/{userId}": { + "get": { + "tags": [ + "BoundaryPermission" + ], + "parameters": [ + { + "name": "userId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "churchLeadsOnly", + "in": "query", + "schema": { + "type": "boolean" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.BoundaryDataResponse" + } + } + }, + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.BoundaryDataResponse" + } + } + }, + "text/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.BoundaryDataResponse" + } + } + } + } + } + } + } + }, + "/api/v1/boundaries/org/{organizationId}/children": { + "get": { + "tags": [ + "BoundaryPermission" + ], + "parameters": [ + { + "name": "organizationId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.BoundaryDataResponse" + } + } + }, + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.BoundaryDataResponse" + } + } + }, + "text/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.BoundaryDataResponse" + } + } + } + } + } + } + } + }, + "/api/v1/boundaries/church/{ldsGeographyId}/children": { + "get": { + "tags": [ + "BoundaryPermission" + ], + "parameters": [ + { + "name": "ldsGeographyId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "churchLeadsOnly", + "in": "query", + "schema": { + "type": "boolean" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.BoundaryDataResponse" + } + } + }, + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.BoundaryDataResponse" + } + } + }, + "text/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.BoundaryDataResponse" + } + } + } + } + } + } + } + }, + "/api/v1/boundaries/users/{userId}/organizations": { + "get": { + "tags": [ + "BoundaryPermission" + ], + "parameters": [ + { + "name": "userId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.BoundaryDataResponse" + } + } + }, + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.BoundaryDataResponse" + } + } + }, + "text/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.BoundaryDataResponse" + } + } + } + } + } + } + } + }, + "/api/v1/boundaries/civic/{id}/users/{userId}": { + "put": { + "tags": [ + "BoundaryPermission" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "userId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK" + } + } + } + }, + "/api/v1/boundaries/rep/{targetAdminUserId}/org/{organizationId}": { + "put": { + "tags": [ + "BoundaryPermission" + ], + "parameters": [ + { + "name": "organizationId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "targetAdminUserId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK" + } + } + } + }, + "/api/v1/boundaries/{userId}/removeall": { + "put": { + "tags": [ + "BoundaryPermission" + ], + "parameters": [ + { + "name": "userId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK" + } + } + } + }, + "/api/v1/boundaries/getorglead/{orgId}": { + "get": { + "tags": [ + "BoundaryPermission" + ], + "parameters": [ + { + "name": "orgId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.UserResultLimited" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.UserResultLimited" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.UserResultLimited" + } + } + } + } + } + } + }, + "/api/v1/boundaries/getchurchlead/{id}": { + "get": { + "tags": [ + "BoundaryPermission" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK" + } + } + } + }, + "/api/v1/boundaries/getjsrep/{orgId}": { + "get": { + "tags": [ + "BoundaryPermission" + ], + "parameters": [ + { + "name": "orgId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.UserResultLimited" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.UserResultLimited" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.UserResultLimited" + } + } + } + } + } + } + }, + "/api/v1/boundaries/update": { + "put": { + "tags": [ + "BoundaryPermission" + ], + "requestBody": { + "content": { + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.BoundaryUpdateDeleteViewModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.BoundaryUpdateDeleteViewModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.BoundaryUpdateDeleteViewModel" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.BoundaryUpdateDeleteViewModel" + } + } + } + }, + "responses": { + "200": { + "description": "OK" + } + } + } + }, + "/api/v1/boundaries/church/{roleid}/{userid}/{churchgeographyid}": { + "put": { + "tags": [ + "BoundaryPermission" + ], + "parameters": [ + { + "name": "roleid", + "in": "path", + "required": true, + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Enums.Role" + } + }, + { + "name": "userid", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "churchgeographyid", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "content": { + "application/json-patch+json": { + "schema": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + } + } + }, + "application/json": { + "schema": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + } + } + }, + "text/json": { + "schema": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + } + } + }, + "application/*+json": { + "schema": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + } + } + } + } + }, + "responses": { + "200": { + "description": "OK" + } + } + } + }, + "/api/v1/boundaries/church/{userid}": { + "delete": { + "tags": [ + "BoundaryPermission" + ], + "parameters": [ + { + "name": "userid", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK" + } + } + } + }, + "/api/v1/boundaries/org/{roleid}/{userid}/{organizationId}": { + "put": { + "tags": [ + "BoundaryPermission" + ], + "parameters": [ + { + "name": "roleid", + "in": "path", + "required": true, + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Enums.Role" + } + }, + { + "name": "userid", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "organizationId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "content": { + "application/json-patch+json": { + "schema": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + } + } + }, + "application/json": { + "schema": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + } + } + }, + "text/json": { + "schema": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + } + } + }, + "application/*+json": { + "schema": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + } + } + } + } + }, + "responses": { + "200": { + "description": "OK" + } + } + } + }, + "/api/v1/boundaries/org/{userid}/{organizationId}": { + "delete": { + "tags": [ + "BoundaryPermission" + ], + "parameters": [ + { + "name": "userid", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "organizationId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK" + } + } + } + }, + "/api/v1/churchGeographies/{churchGeographyId}/adminLabelEnums": { + "get": { + "tags": [ + "ChurchGeography" + ], + "parameters": [ + { + "name": "churchGeographyId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "page", + "in": "query", + "schema": { + "type": "integer", + "format": "int32", + "default": 0 + } + }, + { + "name": "size", + "in": "query", + "schema": { + "type": "integer", + "format": "int32", + "default": 25 + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Pagination.PaginationResult`1[[System.Collections.Generic.IEnumerable`1[[JustServe.Contracts.Geographies.ChurchGeographyAdminLabelEnum, JustServe.Contracts, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]]" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Pagination.PaginationResult`1[[System.Collections.Generic.IEnumerable`1[[JustServe.Contracts.Geographies.ChurchGeographyAdminLabelEnum, JustServe.Contracts, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]]" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Pagination.PaginationResult`1[[System.Collections.Generic.IEnumerable`1[[JustServe.Contracts.Geographies.ChurchGeographyAdminLabelEnum, JustServe.Contracts, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]]" + } + } + } + } + } + } + }, + "/api/v1/churchGeographies/adminLabelEnums": { + "post": { + "tags": [ + "ChurchGeography" + ], + "requestBody": { + "content": { + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.ChurchGeographyAdminLabelEnumRequest" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.ChurchGeographyAdminLabelEnumRequest" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.ChurchGeographyAdminLabelEnumRequest" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.ChurchGeographyAdminLabelEnumRequest" + } + } + } + }, + "responses": { + "200": { + "description": "OK" + } + } + }, + "put": { + "tags": [ + "ChurchGeography" + ], + "requestBody": { + "content": { + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.ChurchGeographyAdminLabelEnumUpdateRequest" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.ChurchGeographyAdminLabelEnumUpdateRequest" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.ChurchGeographyAdminLabelEnumUpdateRequest" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.ChurchGeographyAdminLabelEnumUpdateRequest" + } + } + } + }, + "responses": { + "200": { + "description": "OK" + } + } + } + }, + "/api/v1/churchGeographies/adminLabelEnums/{churchGeographyAdminLabelEnumId}": { + "delete": { + "tags": [ + "ChurchGeography" + ], + "parameters": [ + { + "name": "churchGeographyAdminLabelEnumId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK" + } + } + } + }, + "/api/v1/churchGeographies/{unitIdOrChurchGeographyId}/upsert": { + "put": { + "tags": [ + "ChurchGeography" + ], + "parameters": [ + { + "name": "unitIdOrChurchGeographyId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK" + } + } + } + }, + "/api/v1/churchGeographies/{areaUnitId}/updateArea": { + "put": { + "tags": [ + "ChurchGeography" + ], + "parameters": [ + { + "name": "areaUnitId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK" + } + } + } + }, + "/api/v1/churchGeographies/updateAllAreas": { + "put": { + "tags": [ + "ChurchGeography" + ], + "parameters": [ + { + "name": "areaUnitId", + "in": "query", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK" + } + } + } + }, + "/api/v1/corus/allarticles": { + "get": { + "tags": [ + "Corus" + ], + "parameters": [ + { + "name": "lang", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "name": "isPreview", + "in": "query", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Corus.ArticlesDataSet" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Corus.ArticlesDataSet" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Corus.ArticlesDataSet" + } + } + } + } + } + } + }, + "/api/v1/corus/get-article-by-id": { + "get": { + "tags": [ + "Corus" + ], + "parameters": [ + { + "name": "lang", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "name": "Id", + "in": "query", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Corus.ArticlesDataSet" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Corus.ArticlesDataSet" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Corus.ArticlesDataSet" + } + } + } + } + } + } + }, + "/api/v1/corus/allchapters": { + "get": { + "tags": [ + "Corus" + ], + "parameters": [ + { + "name": "lang", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "name": "isPreview", + "in": "query", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Corus.ChaptersDataSet" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Corus.ChaptersDataSet" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Corus.ChaptersDataSet" + } + } + } + } + } + } + }, + "/api/v1/corus/training/allchapters": { + "get": { + "tags": [ + "Corus" + ], + "parameters": [ + { + "name": "lang", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "name": "isPreview", + "in": "query", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Corus.ChaptersDataSet" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Corus.ChaptersDataSet" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Corus.ChaptersDataSet" + } + } + } + } + } + } + }, + "/api/v1/corus/getchapter": { + "get": { + "tags": [ + "Corus" + ], + "parameters": [ + { + "name": "lang", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "name": "ChapterId", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "name": "corusPage", + "in": "query", + "schema": { + "$ref": "#/components/schemas/JustServe.API.Controllers.CorusController+CorusPage" + } + }, + { + "name": "isPreview", + "in": "query", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Corus.ChaptersDataSet" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Corus.ChaptersDataSet" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Corus.ChaptersDataSet" + } + } + } + } + } + } + }, + "/api/v1/corus/getpage": { + "get": { + "tags": [ + "Corus" + ], + "parameters": [ + { + "name": "lang", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "name": "PageId", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "name": "corusPage", + "in": "query", + "schema": { + "$ref": "#/components/schemas/JustServe.API.Controllers.CorusController+CorusPage" + } + }, + { + "name": "isPreview", + "in": "query", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Corus.PagesDataSet" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Corus.PagesDataSet" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Corus.PagesDataSet" + } + } + } + } + } + } + }, + "/api/v1/corus/media": { + "get": { + "tags": [ + "Corus" + ], + "parameters": [ + { + "name": "lang", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "name": "id", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "name": "size", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "name": "corusPage", + "in": "query", + "schema": { + "$ref": "#/components/schemas/JustServe.API.Controllers.CorusController+CorusPage" + } + }, + { + "name": "isPreview", + "in": "query", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "responses": { + "200": { + "description": "OK" + } + } + } + }, + "/api/v1/corus/media/{size}/{id}": { + "get": { + "tags": [ + "Corus" + ], + "parameters": [ + { + "name": "lang", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "size", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "corusPage", + "in": "query", + "schema": { + "$ref": "#/components/schemas/JustServe.API.Controllers.CorusController+CorusPage" + } + }, + { + "name": "isPreview", + "in": "query", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "responses": { + "200": { + "description": "OK" + } + } + } + }, + "/api/v1/routing/{url}": { + "get": { + "tags": [ + "DynamicRouting" + ], + "parameters": [ + { + "name": "url", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.DynamicRoutingDataResponse" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.DynamicRoutingDataResponse" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.DynamicRoutingDataResponse" + } + } + } + } + } + } + }, + "/api/v1/email/contact/leadName": { + "post": { + "tags": [ + "Email" + ], + "requestBody": { + "content": { + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.ContactUsReciepientViewModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.ContactUsReciepientViewModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.ContactUsReciepientViewModel" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.ContactUsReciepientViewModel" + } + } + } + }, + "responses": { + "200": { + "description": "OK" + } + } + } + }, + "/api/v1/email/contact": { + "post": { + "tags": [ + "Email" + ], + "requestBody": { + "content": { + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.ContactUsViewModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.ContactUsViewModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.ContactUsViewModel" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.ContactUsViewModel" + } + } + } + }, + "responses": { + "200": { + "description": "OK" + } + } + } + }, + "/api/v1/email/announcement": { + "post": { + "tags": [ + "Email" + ], + "requestBody": { + "content": { + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.ProjectAnnouncementViewModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.ProjectAnnouncementViewModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.ProjectAnnouncementViewModel" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.ProjectAnnouncementViewModel" + } + } + } + }, + "responses": { + "200": { + "description": "OK" + } + } + } + }, + "/api/v1/canary": { + "get": { + "tags": [ + "Health" + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.HealthCheckResponse" + } + } + } + } + } + } + }, + "/api/v1/loglevels": { + "get": { + "tags": [ + "Health" + ], + "responses": { + "200": { + "description": "OK" + } + } + } + }, + "/api/v1/images/crop": { + "post": { + "tags": [ + "Image" + ], + "requestBody": { + "content": { + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.CropViewModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.CropViewModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.CropViewModel" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.CropViewModel" + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.CropedImageResponse" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.CropedImageResponse" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.CropedImageResponse" + } + } + } + } + } + } + }, + "/api/v1/images": { + "post": { + "tags": [ + "Image" + ], + "requestBody": { + "content": { + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.ImageUploadRequest" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.ImageUploadRequest" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.ImageUploadRequest" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.ImageUploadRequest" + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.ImageUploadResponse" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.ImageUploadResponse" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.ImageUploadResponse" + } + } + } + } + } + } + }, + "/api/v1/languages": { + "get": { + "tags": [ + "Language" + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.LocaleNames" + } + } + }, + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.LocaleNames" + } + } + }, + "text/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.LocaleNames" + } + } + } + } + } + } + } + }, + "/api/v1/locations/user/{userId}/admin": { + "post": { + "tags": [ + "Locations" + ], + "parameters": [ + { + "name": "userId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.LocationMapsObject" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.LocationMapsObject" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.LocationMapsObject" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.LocationMapsObject" + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.BoolResult" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.BoolResult" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.BoolResult" + } + } + } + } + } + } + }, + "/api/v1/locations/{language}": { + "get": { + "tags": [ + "Locations" + ], + "parameters": [ + { + "name": "language", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.CountryStatePair" + } + } + }, + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.CountryStatePair" + } + } + }, + "text/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.CountryStatePair" + } + } + } + } + } + } + } + }, + "/api/v1/locations/chidren/{parentId}/{locale}": { + "get": { + "tags": [ + "Locations" + ], + "parameters": [ + { + "name": "parentId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "locale", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.CivicChildResult" + } + } + }, + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.CivicChildResult" + } + } + }, + "text/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.CivicChildResult" + } + } + } + } + } + } + } + }, + "/api/v1/locations/{language}/countries": { + "get": { + "tags": [ + "Locations" + ], + "parameters": [ + { + "name": "language", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/json": { + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "text/json": { + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + } + } + }, + "/api/v1/locations/{language}/address/{address}": { + "get": { + "tags": [ + "Locations" + ], + "parameters": [ + { + "name": "language", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "address", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Locations.Location" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Locations.Location" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Locations.Location" + } + } + } + } + } + } + }, + "/api/v1/locations/{language}/countries/postal": { + "get": { + "tags": [ + "Locations" + ], + "parameters": [ + { + "name": "language", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Geographies.CountryNameInfo" + } + } + }, + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Geographies.CountryNameInfo" + } + } + }, + "text/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Geographies.CountryNameInfo" + } + } + } + } + } + } + } + }, + "/api/v1/locations/countrycodes": { + "get": { + "tags": [ + "Locations" + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Geographies.CountryInfo" + } + } + }, + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Geographies.CountryInfo" + } + } + }, + "text/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Geographies.CountryInfo" + } + } + } + } + } + } + } + }, + "/api/v1/locations/{language}/countries/all": { + "get": { + "tags": [ + "Locations" + ], + "parameters": [ + { + "name": "language", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "SupportedCountriesOnly", + "in": "query", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "excludeSupportedCountries", + "in": "query", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Geographies.CountryNameInfo" + } + } + }, + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Geographies.CountryNameInfo" + } + } + }, + "text/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Geographies.CountryNameInfo" + } + } + } + } + } + } + } + }, + "/api/v1/locations/{language}/countries/all/{excludeSupportedCountries}": { + "get": { + "tags": [ + "Locations" + ], + "parameters": [ + { + "name": "language", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "SupportedCountriesOnly", + "in": "query", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "excludeSupportedCountries", + "in": "path", + "required": true, + "schema": { + "type": "boolean", + "default": false + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Geographies.CountryNameInfo" + } + } + }, + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Geographies.CountryNameInfo" + } + } + }, + "text/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Geographies.CountryNameInfo" + } + } + } + } + } + } + } + }, + "/api/v1/locations/lds/{id}/name": { + "get": { + "tags": [ + "Locations" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK" + } + } + } + }, + "/api/v1/locations/lds/{id}": { + "get": { + "tags": [ + "Locations" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Geographies.LDSGeography" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Geographies.LDSGeography" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Geographies.LDSGeography" + } + } + } + } + } + } + }, + "/api/v1/locations/geocode": { + "post": { + "tags": [ + "Locations" + ], + "requestBody": { + "content": { + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.LocationString" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.LocationString" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.LocationString" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.LocationString" + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Locations.LocationRad" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Locations.LocationRad" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Locations.LocationRad" + } + } + } + } + } + } + }, + "/api/v1/locations/geocode/suggestions": { + "post": { + "tags": [ + "Locations" + ], + "requestBody": { + "content": { + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.LocationString" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.LocationString" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.LocationString" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.LocationString" + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.SuggestionResponse" + } + } + }, + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.SuggestionResponse" + } + } + }, + "text/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.SuggestionResponse" + } + } + } + } + } + } + } + }, + "/api/v1/locations/registration-age": { + "get": { + "tags": [ + "Locations" + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/json": { + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "text/json": { + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + } + } + }, + "/api/v1/locations/get-country-launch-info": { + "get": { + "tags": [ + "Locations" + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/json": { + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "text/json": { + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + } + } + }, + "/api/v1/locations/get-country-launch-info/{updateCache}": { + "get": { + "tags": [ + "Locations" + ], + "parameters": [ + { + "name": "updateCache", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/json": { + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "text/json": { + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + } + } + }, + "/api/v1/metrics/raw/church/{unitId}": { + "post": { + "tags": [ + "Metrics" + ], + "parameters": [ + { + "name": "unitId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.WidgetRequestModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.WidgetRequestModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.WidgetRequestModel" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.WidgetRequestModel" + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.Metrics" + } + } + }, + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.Metrics" + } + } + }, + "text/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.Metrics" + } + } + } + } + } + } + } + }, + "/api/v1/metrics/church/{unitId}/{lang}": { + "get": { + "tags": [ + "Metrics" + ], + "parameters": [ + { + "name": "unitId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "lang", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK" + } + } + } + }, + "/api/v1/metrics/church/{unitId}/date/{date}": { + "get": { + "tags": [ + "Metrics" + ], + "parameters": [ + { + "name": "date", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "unitId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK" + } + } + } + }, + "/api/v1/metrics/church/{unitId}/excel/{lang}": { + "get": { + "tags": [ + "Metrics" + ], + "parameters": [ + { + "name": "unitId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "lang", + "in": "path", + "required": true, + "schema": { + "type": "string", + "default": "en-us" + } + } + ], + "responses": { + "200": { + "description": "OK" + } + } + } + }, + "/api/mobile/v1/user/login": { + "post": { + "tags": [ + "Mobile" + ], + "requestBody": { + "content": { + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.Mobile.LogInModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.Mobile.LogInModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.Mobile.LogInModel" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.Mobile.LogInModel" + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.Mobile.MobileUserResponseModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.Mobile.MobileUserResponseModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.Mobile.MobileUserResponseModel" + } + } + } + } + } + } + }, + "/api/mobile/v1/user/logout": { + "get": { + "tags": [ + "Mobile" + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "type": "boolean" + } + }, + "application/json": { + "schema": { + "type": "boolean" + } + }, + "text/json": { + "schema": { + "type": "boolean" + } + } + } + } + } + } + }, + "/api/mobile/v1/user/token/{token}": { + "post": { + "tags": [ + "Mobile" + ], + "parameters": [ + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.Mobile.RefreshTokenModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.Mobile.RefreshTokenModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.Mobile.RefreshTokenModel" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.Mobile.RefreshTokenModel" + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.Mobile.MobileUserResponseModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.Mobile.MobileUserResponseModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.Mobile.MobileUserResponseModel" + } + } + } + } + } + } + }, + "/api/mobile/v1/user/register": { + "post": { + "tags": [ + "Mobile" + ], + "requestBody": { + "content": { + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Users.UserRegistrationModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Users.UserRegistrationModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Users.UserRegistrationModel" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Users.UserRegistrationModel" + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.Mobile.MobileUserResponseModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.Mobile.MobileUserResponseModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.Mobile.MobileUserResponseModel" + } + } + } + } + } + } + }, + "/api/mobile/v1/user/recovery": { + "post": { + "tags": [ + "Mobile" + ], + "requestBody": { + "content": { + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.RecoverAccountViewModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.RecoverAccountViewModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.RecoverAccountViewModel" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.RecoverAccountViewModel" + } + } + } + }, + "responses": { + "200": { + "description": "OK" + } + } + } + }, + "/api/mobile/v1/user/activation/{token}": { + "get": { + "tags": [ + "Mobile" + ], + "parameters": [ + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK" + } + } + } + }, + "/api/mobile/v1/users/test/{userId}/activate": { + "get": { + "tags": [ + "Mobile" + ], + "parameters": [ + { + "name": "userId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK" + } + } + } + }, + "/api/mobile/v1/users/test/{userId}/activationEmailLink": { + "get": { + "tags": [ + "Mobile" + ], + "parameters": [ + { + "name": "userId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK" + } + } + } + }, + "/api/mobile/v1/user/{userId}": { + "get": { + "tags": [ + "Mobile" + ], + "parameters": [ + { + "name": "userId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Users.MobileUser" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Users.MobileUser" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Users.MobileUser" + } + } + } + } + } + }, + "delete": { + "tags": [ + "Mobile" + ], + "parameters": [ + { + "name": "userId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK" + } + } + }, + "post": { + "tags": [ + "Mobile" + ], + "parameters": [ + { + "name": "userId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "content": { + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.Mobile.MobileUpdateUserModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.Mobile.MobileUpdateUserModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.Mobile.MobileUpdateUserModel" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.Mobile.MobileUpdateUserModel" + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.Mobile.MobileUpdateUserModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.Mobile.MobileUpdateUserModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.Mobile.MobileUpdateUserModel" + } + } + } + } + } + } + }, + "/api/mobile/v1/user/{userId}/accountInformation": { + "get": { + "tags": [ + "Mobile" + ], + "parameters": [ + { + "name": "userId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.Personalsettings" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.Personalsettings" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.Personalsettings" + } + } + } + } + } + } + }, + "/api/mobile/v1/user/{userId}/personal": { + "get": { + "tags": [ + "Mobile" + ], + "parameters": [ + { + "name": "userId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.Personalsettings" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.Personalsettings" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.Personalsettings" + } + } + } + } + } + } + }, + "/api/mobile/v1/user/{userId}/location": { + "get": { + "tags": [ + "Mobile" + ], + "parameters": [ + { + "name": "userId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.Mobile.MobileLocationSlim" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.Mobile.MobileLocationSlim" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.Mobile.MobileLocationSlim" + } + } + } + } + } + } + }, + "/api/mobile/v1/user/{userId}/projectOptions": { + "get": { + "tags": [ + "Mobile" + ], + "parameters": [ + { + "name": "userId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.Mobile.Projectsearchpreferences" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.Mobile.Projectsearchpreferences" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.Mobile.Projectsearchpreferences" + } + } + } + } + } + } + }, + "/api/mobile/v1/user/{userId}/contactOptions": { + "get": { + "tags": [ + "Mobile" + ], + "parameters": [ + { + "name": "userId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.Mobile.Notificationsettings" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.Mobile.Notificationsettings" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.Mobile.Notificationsettings" + } + } + } + } + } + } + }, + "/api/mobile/v1/user/{userId}/interests": { + "get": { + "tags": [ + "Mobile" + ], + "parameters": [ + { + "name": "userId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "lang", + "in": "query", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "type": "string" + } + }, + "application/json": { + "schema": { + "type": "string" + } + }, + "text/json": { + "schema": { + "type": "string" + } + } + } + } + } + } + }, + "/api/mobile/v1/user/{userId}/interests/{lang}": { + "get": { + "tags": [ + "Mobile" + ], + "parameters": [ + { + "name": "userId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "lang", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "type": "string" + } + }, + "application/json": { + "schema": { + "type": "string" + } + }, + "text/json": { + "schema": { + "type": "string" + } + } + } + } + } + } + }, + "/api/mobile/v1/user/{userId}/skills": { + "get": { + "tags": [ + "Mobile" + ], + "parameters": [ + { + "name": "userId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "lang", + "in": "query", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/json": { + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "text/json": { + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + } + } + }, + "/api/mobile/v1/user/{userId}/skills/{lang}": { + "get": { + "tags": [ + "Mobile" + ], + "parameters": [ + { + "name": "userId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "lang", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/json": { + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "text/json": { + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + } + } + }, + "/api/mobile/v1/user/{userId}/tools": { + "get": { + "tags": [ + "Mobile" + ], + "parameters": [ + { + "name": "userId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "lang", + "in": "query", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/json": { + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "text/json": { + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + } + } + }, + "/api/mobile/v1/user/{userId}/tools/{lang}": { + "get": { + "tags": [ + "Mobile" + ], + "parameters": [ + { + "name": "userId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "lang", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/json": { + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "text/json": { + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + } + } + }, + "/api/mobile/v1/user/{userId}/favoriteProjects": { + "get": { + "tags": [ + "Mobile" + ], + "parameters": [ + { + "name": "userId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.Mobile.MobileProject" + } + } + }, + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.Mobile.MobileProject" + } + } + }, + "text/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.Mobile.MobileProject" + } + } + } + } + } + } + } + }, + "/api/mobile/v2/user/{userId}/favoriteProjects": { + "get": { + "tags": [ + "Mobile" + ], + "parameters": [ + { + "name": "userId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.Mobile.MobileProject" + } + } + }, + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.Mobile.MobileProject" + } + } + }, + "text/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.Mobile.MobileProject" + } + } + } + } + } + } + } + }, + "/api/mobile/v1/user/{userId}/favoriteOrganizations": { + "get": { + "tags": [ + "Mobile" + ], + "parameters": [ + { + "name": "userId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.Mobile.MobileOrg" + } + } + }, + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.Mobile.MobileOrg" + } + } + }, + "text/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.Mobile.MobileOrg" + } + } + } + } + } + } + } + }, + "/api/mobile/v2/user/{userId}/favoriteOrganizations": { + "get": { + "tags": [ + "Mobile" + ], + "parameters": [ + { + "name": "userId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.Mobile.MobileOrg" + } + } + }, + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.Mobile.MobileOrg" + } + } + }, + "text/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.Mobile.MobileOrg" + } + } + } + } + } + } + } + }, + "/api/mobile/v1/user/{userId}/volunteeredProjects": { + "get": { + "tags": [ + "Mobile" + ], + "parameters": [ + { + "name": "userId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.Mobile.MobileProject" + } + } + }, + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.Mobile.MobileProject" + } + } + }, + "text/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.Mobile.MobileProject" + } + } + } + } + } + } + } + }, + "/api/mobile/v2/user/{userId}/volunteeredProjects": { + "get": { + "tags": [ + "Mobile" + ], + "parameters": [ + { + "name": "userId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.Mobile.MobileProject" + } + } + }, + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.Mobile.MobileProject" + } + } + }, + "text/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.Mobile.MobileProject" + } + } + } + } + } + } + } + }, + "/api/mobile/v1/user/{userId}/notifications/dismiss/completeprofile": { + "put": { + "tags": [ + "Mobile" + ], + "parameters": [ + { + "name": "userId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "notificationId", + "in": "query", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/json": { + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "text/json": { + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + } + } + }, + "/api/mobile/v1/user/{userId}/notifications/dismiss/{notificationId}": { + "put": { + "tags": [ + "Mobile" + ], + "parameters": [ + { + "name": "userId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "notificationId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/json": { + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "text/json": { + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + } + } + }, + "/api/mobile/v1/projects/search": { + "post": { + "tags": [ + "Mobile" + ], + "requestBody": { + "content": { + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.Mobile.MobileProjectSearchRequestModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.Mobile.MobileProjectSearchRequestModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.Mobile.MobileProjectSearchRequestModel" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.Mobile.MobileProjectSearchRequestModel" + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.Mobile.MobileProjectSearchResponse" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.Mobile.MobileProjectSearchResponse" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.Mobile.MobileProjectSearchResponse" + } + } + } + } + } + } + }, + "/api/mobile/v2/projects/search": { + "post": { + "tags": [ + "Mobile" + ], + "requestBody": { + "content": { + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.Mobile.MobileProjectSearchRequestModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.Mobile.MobileProjectSearchRequestModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.Mobile.MobileProjectSearchRequestModel" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.Mobile.MobileProjectSearchRequestModel" + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.Mobile.MobileProjectSearchResponse" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.Mobile.MobileProjectSearchResponse" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.Mobile.MobileProjectSearchResponse" + } + } + } + } + } + } + }, + "/api/mobile/v1/projects/{projectId}/user/{userId}/favorite": { + "put": { + "tags": [ + "Mobile" + ], + "parameters": [ + { + "name": "projectId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "userId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Users.MobileUser" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Users.MobileUser" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Users.MobileUser" + } + } + } + } + } + }, + "delete": { + "tags": [ + "Mobile" + ], + "parameters": [ + { + "name": "projectId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "userId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Users.MobileUser" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Users.MobileUser" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Users.MobileUser" + } + } + } + } + } + } + }, + "/api/mobile/v1/projects": { + "post": { + "tags": [ + "Mobile" + ], + "requestBody": { + "content": { + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.Mobile.MobileStringList" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.Mobile.MobileStringList" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.Mobile.MobileStringList" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.Mobile.MobileStringList" + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.Mobile.MobileProject" + } + } + }, + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.Mobile.MobileProject" + } + } + }, + "text/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.Mobile.MobileProject" + } + } + } + } + } + } + } + }, + "/api/mobile/v2/projects": { + "post": { + "tags": [ + "Mobile" + ], + "requestBody": { + "content": { + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.Mobile.MobileStringList" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.Mobile.MobileStringList" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.Mobile.MobileStringList" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.Mobile.MobileStringList" + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.Mobile.MobileProject" + } + } + }, + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.Mobile.MobileProject" + } + } + }, + "text/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.Mobile.MobileProject" + } + } + } + } + } + } + } + }, + "/api/mobile/v1/projects/{id}/event/{eventId}/volunteer/{userId}": { + "put": { + "tags": [ + "Mobile" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "eventId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "userId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.Mobile.MobileProjectVolunteerModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.Mobile.MobileProjectVolunteerModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.Mobile.MobileProjectVolunteerModel" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.Mobile.MobileProjectVolunteerModel" + } + } + } + }, + "responses": { + "200": { + "description": "OK" + } + } + }, + "delete": { + "tags": [ + "Mobile" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "userId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "eventId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.Mobile.MobileProject" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.Mobile.MobileProject" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.Mobile.MobileProject" + } + } + } + } + } + } + }, + "/api/mobile/v1/projects/{id}/volunteer/{userId}/recurring/{volunteeredRecurrenceId}": { + "put": { + "tags": [ + "Mobile" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "userId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "volunteeredRecurrenceId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.VolunteerRecurringViewModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.VolunteerRecurringViewModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.VolunteerRecurringViewModel" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.VolunteerRecurringViewModel" + } + } + } + }, + "responses": { + "200": { + "description": "OK" + } + } + } + }, + "/api/mobile/v1/projects/searchByTitle": { + "post": { + "tags": [ + "Mobile" + ], + "requestBody": { + "content": { + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.Mobile.MobileProjectFAYT" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.Mobile.MobileProjectFAYT" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.Mobile.MobileProjectFAYT" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.Mobile.MobileProjectFAYT" + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.Mobile.FAYTResponse" + } + } + }, + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.Mobile.FAYTResponse" + } + } + }, + "text/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.Mobile.FAYTResponse" + } + } + } + } + } + } + } + }, + "/api/mobile/v1/projects/{projectId}/volunteer/external": { + "put": { + "tags": [ + "Mobile" + ], + "parameters": [ + { + "name": "projectId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK" + } + } + } + }, + "/api/mobile/v2/organizations/search": { + "post": { + "tags": [ + "Mobile" + ], + "requestBody": { + "content": { + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.Mobile.MobileOrgSearchModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.Mobile.MobileOrgSearchModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.Mobile.MobileOrgSearchModel" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.Mobile.MobileOrgSearchModel" + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.Mobile.MobileOrgSearchResponse" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.Mobile.MobileOrgSearchResponse" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.Mobile.MobileOrgSearchResponse" + } + } + } + } + } + } + }, + "/api/mobile/v1/organizations/search": { + "post": { + "tags": [ + "Mobile" + ], + "requestBody": { + "content": { + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.Mobile.MobileOrgSearchModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.Mobile.MobileOrgSearchModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.Mobile.MobileOrgSearchModel" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.Mobile.MobileOrgSearchModel" + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.Mobile.MobileOrgSearchResponse" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.Mobile.MobileOrgSearchResponse" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.Mobile.MobileOrgSearchResponse" + } + } + } + } + } + } + }, + "/api/mobile/v1/organizations": { + "post": { + "tags": [ + "Mobile" + ], + "requestBody": { + "content": { + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.Mobile.MobileStringList" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.Mobile.MobileStringList" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.Mobile.MobileStringList" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.Mobile.MobileStringList" + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.Mobile.MobileOrg" + } + } + }, + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.Mobile.MobileOrg" + } + } + }, + "text/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.Mobile.MobileOrg" + } + } + } + } + } + } + } + }, + "/api/mobile/v2/organizations": { + "post": { + "tags": [ + "Mobile" + ], + "requestBody": { + "content": { + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.Mobile.MobileStringList" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.Mobile.MobileStringList" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.Mobile.MobileStringList" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.Mobile.MobileStringList" + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.Mobile.MobileOrg" + } + } + }, + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.Mobile.MobileOrg" + } + } + }, + "text/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.Mobile.MobileOrg" + } + } + } + } + } + } + } + }, + "/api/mobile/v1/organizations/{orgId}/user/{userId}/favorite": { + "put": { + "tags": [ + "Mobile" + ], + "parameters": [ + { + "name": "orgId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "userId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.UserSearchResults" + } + } + }, + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.UserSearchResults" + } + } + }, + "text/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.UserSearchResults" + } + } + } + } + } + } + }, + "delete": { + "tags": [ + "Mobile" + ], + "parameters": [ + { + "name": "orgId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "userId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.UserSearchResults" + } + } + }, + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.UserSearchResults" + } + } + }, + "text/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.UserSearchResults" + } + } + } + } + } + } + } + }, + "/api/mobile/v1/organizations/searchByTitle": { + "post": { + "tags": [ + "Mobile" + ], + "requestBody": { + "content": { + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.Mobile.MobileProjectFAYT" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.Mobile.MobileProjectFAYT" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.Mobile.MobileProjectFAYT" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.Mobile.MobileProjectFAYT" + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.SearchResponseWithRelativityScore" + } + } + }, + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.SearchResponseWithRelativityScore" + } + } + }, + "text/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.SearchResponseWithRelativityScore" + } + } + } + } + } + } + } + }, + "/api/mobile/v1/search/LocationSearchSuggestions": { + "post": { + "tags": [ + "Mobile" + ], + "requestBody": { + "content": { + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.LocationString" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.LocationString" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.LocationString" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.LocationString" + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/json": { + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "text/json": { + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + } + } + }, + "/api/mobile/v1/languages": { + "get": { + "tags": [ + "Mobile" + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.LocaleNames" + } + } + }, + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.LocaleNames" + } + } + }, + "text/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.LocaleNames" + } + } + } + } + } + } + } + }, + "/api/mobile/v1/options/{bcp47Language}/{countryCode}": { + "get": { + "tags": [ + "Mobile" + ], + "parameters": [ + { + "name": "bcp47Language", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "refreshCache", + "in": "query", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "countryCode", + "in": "query", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.Mobile.MobileOptions" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.Mobile.MobileOptions" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.Mobile.MobileOptions" + } + } + } + } + } + } + }, + "/api/mobile/v1/options/{bcp47Language}/{refreshCache}/{countryCode}": { + "get": { + "tags": [ + "Mobile" + ], + "parameters": [ + { + "name": "bcp47Language", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "refreshCache", + "in": "path", + "required": true, + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "countryCode", + "in": "query", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.Mobile.MobileOptions" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.Mobile.MobileOptions" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.Mobile.MobileOptions" + } + } + } + } + } + } + }, + "/api/mobile/v1/options/{bcp47Language}/skills/{countryCode}": { + "get": { + "tags": [ + "Mobile" + ], + "parameters": [ + { + "name": "bcp47Language", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "countryCode", + "in": "query", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.Mobile.SkillInfo" + } + } + }, + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.Mobile.SkillInfo" + } + } + }, + "text/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.Mobile.SkillInfo" + } + } + } + } + } + } + } + }, + "/api/mobile/v1/options/{bcp47Language}/interests": { + "get": { + "tags": [ + "Mobile" + ], + "parameters": [ + { + "name": "bcp47Language", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.Mobile.IdandName" + } + } + }, + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.Mobile.IdandName" + } + } + }, + "text/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.Mobile.IdandName" + } + } + } + } + } + } + } + }, + "/api/mobile/v1/options/{bcp47Language}/countries": { + "get": { + "tags": [ + "Mobile" + ], + "parameters": [ + { + "name": "bcp47Language", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.Mobile.MobileCountryNameInfo" + } + } + }, + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.Mobile.MobileCountryNameInfo" + } + } + }, + "text/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.Mobile.MobileCountryNameInfo" + } + } + } + } + } + } + } + }, + "/api/mobile/v1/options/{bcp47Language}/tools": { + "get": { + "tags": [ + "Mobile" + ], + "parameters": [ + { + "name": "bcp47Language", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.Mobile.IdandName" + } + } + }, + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.Mobile.IdandName" + } + } + }, + "text/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.Mobile.IdandName" + } + } + } + } + } + } + } + }, + "/api/mobile/v1/options/{bcp47Language}/radiusOptions": { + "get": { + "tags": [ + "Mobile" + ], + "parameters": [ + { + "name": "bcp47Language", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "type": "array", + "items": { + "type": "integer", + "format": "int32" + } + } + }, + "application/json": { + "schema": { + "type": "array", + "items": { + "type": "integer", + "format": "int32" + } + } + }, + "text/json": { + "schema": { + "type": "array", + "items": { + "type": "integer", + "format": "int32" + } + } + } + } + } + } + } + }, + "/api/mobile/v1/volunteer/privacy/{bcp47Language}": { + "get": { + "tags": [ + "Mobile" + ], + "parameters": [ + { + "name": "bcp47Language", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "type": "string" + } + }, + "application/json": { + "schema": { + "type": "string" + } + }, + "text/json": { + "schema": { + "type": "string" + } + } + } + } + } + } + }, + "/api/v1/newsletter/projects/search": { + "post": { + "tags": [ + "Newsletter" + ], + "requestBody": { + "content": { + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.SearchProjectsNewsletterModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.SearchProjectsNewsletterModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.SearchProjectsNewsletterModel" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.SearchProjectsNewsletterModel" + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.ProjectTiny" + } + } + }, + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.ProjectTiny" + } + } + }, + "text/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.ProjectTiny" + } + } + } + } + } + } + } + }, + "/api/v1/newsletter/projects/admin/{userId}": { + "get": { + "tags": [ + "Newsletter" + ], + "parameters": [ + { + "name": "userId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + } + } + }, + "application/json": { + "schema": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + } + } + }, + "text/json": { + "schema": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + } + } + } + } + } + } + } + }, + "/api/v1/newsletter/project/volunteered/{userId}": { + "get": { + "tags": [ + "Newsletter" + ], + "parameters": [ + { + "name": "userId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + } + } + }, + "application/json": { + "schema": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + } + } + }, + "text/json": { + "schema": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + } + } + } + } + } + } + } + }, + "/api/v1/newsletter/user/{userId}": { + "get": { + "tags": [ + "Newsletter" + ], + "parameters": [ + { + "name": "userId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.UserNewsletter" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.UserNewsletter" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.UserNewsletter" + } + } + } + } + } + } + }, + "/api/v1/newsletter/d365user/{userId}": { + "get": { + "tags": [ + "Newsletter" + ], + "parameters": [ + { + "name": "userId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.MSDynamicsFormattedUserV2" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.MSDynamicsFormattedUserV2" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.MSDynamicsFormattedUserV2" + } + } + } + } + } + } + }, + "/api/v1/notifications/users/{userId}": { + "get": { + "tags": [ + "Notification" + ], + "parameters": [ + { + "name": "userId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Notifications.UserNotification" + } + } + }, + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Notifications.UserNotification" + } + } + }, + "text/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Notifications.UserNotification" + } + } + } + } + } + } + } + }, + "/api/v1/notifications/users/banner/geo": { + "post": { + "tags": [ + "Notification" + ], + "requestBody": { + "content": { + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.LocationString" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.LocationString" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.LocationString" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.LocationString" + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Notifications.CustomNotificationResult" + } + } + }, + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Notifications.CustomNotificationResult" + } + } + }, + "text/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Notifications.CustomNotificationResult" + } + } + } + } + } + } + } + }, + "/api/v1/notifications/{notificationId}/seen": { + "put": { + "tags": [ + "Notification" + ], + "parameters": [ + { + "name": "notificationId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK" + } + } + } + }, + "/api/v1/notifications/users/{userId}/clearall": { + "delete": { + "tags": [ + "Notification" + ], + "parameters": [ + { + "name": "userId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Notifications.UserNotification" + } + } + }, + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Notifications.UserNotification" + } + } + }, + "text/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Notifications.UserNotification" + } + } + } + } + } + } + } + }, + "/api/v1/notifications/createcustom": { + "put": { + "tags": [ + "Notification" + ], + "parameters": [ + { + "name": "notificationId", + "in": "query", + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "content": { + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.CustomNotificationModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.CustomNotificationModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.CustomNotificationModel" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.CustomNotificationModel" + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Notifications.CustomNotification" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Notifications.CustomNotification" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Notifications.CustomNotification" + } + } + } + } + } + } + }, + "/api/v1/notifications/updatecustom/{notificationId}": { + "put": { + "tags": [ + "Notification" + ], + "parameters": [ + { + "name": "notificationId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "content": { + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.CustomNotificationModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.CustomNotificationModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.CustomNotificationModel" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.CustomNotificationModel" + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Notifications.CustomNotification" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Notifications.CustomNotification" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Notifications.CustomNotification" + } + } + } + } + } + } + }, + "/api/v1/notifications/ActiveBannerNotifications": { + "get": { + "tags": [ + "Notification" + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Notifications.CustomNotification" + } + } + }, + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Notifications.CustomNotification" + } + } + }, + "text/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Notifications.CustomNotification" + } + } + } + } + } + } + } + }, + "/api/v1/notifications/custom/{customNotificationId}": { + "get": { + "tags": [ + "Notification" + ], + "parameters": [ + { + "name": "customNotificationId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Notifications.CustomNotification" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Notifications.CustomNotification" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Notifications.CustomNotification" + } + } + } + } + } + }, + "delete": { + "tags": [ + "Notification" + ], + "parameters": [ + { + "name": "customNotificationId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK" + } + } + } + }, + "/api/v1/organizations": { + "post": { + "tags": [ + "Organization" + ], + "requestBody": { + "content": { + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.OrganizationCreateRequest" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.OrganizationCreateRequest" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.OrganizationCreateRequest" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.OrganizationCreateRequest" + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + } + } + } + } + }, + "/api/v1/organizations/url/validate": { + "post": { + "tags": [ + "Organization" + ], + "requestBody": { + "content": { + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.VanityURLValidationModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.VanityURLValidationModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.VanityURLValidationModel" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.VanityURLValidationModel" + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.BoolResult" + } + } + } + } + } + } + }, + "/api/v1/organizations/{id}": { + "put": { + "tags": [ + "Organization" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "content": { + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.OrganizationUpdateRequest" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.OrganizationUpdateRequest" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.OrganizationUpdateRequest" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.OrganizationUpdateRequest" + } + } + } + }, + "responses": { + "200": { + "description": "OK" + } + } + }, + "get": { + "tags": [ + "Organization" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Organizations.Organization" + } + } + } + } + } + } + }, + "/api/v1/organizations/{id}/{includeEndorsementData}": { + "get": { + "tags": [ + "Organization" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "includeEndorsementData", + "in": "path", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Organizations.Organization" + } + } + } + } + } + } + }, + "/api/v1/organizations/{id}/projects": { + "post": { + "tags": [ + "Organization" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "content": { + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.OrganizationProjectSearchRequest" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.OrganizationProjectSearchRequest" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.OrganizationProjectSearchRequest" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.OrganizationProjectSearchRequest" + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.ProjectsView" + } + } + } + } + } + } + }, + "/api/v2/organizations/{id}/projects": { + "get": { + "tags": [ + "Organization" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "keywords", + "in": "query", + "schema": { + "type": "string", + "default": "" + } + }, + { + "name": "page", + "in": "query", + "schema": { + "type": "integer", + "format": "int32", + "default": 0 + } + }, + { + "name": "size", + "in": "query", + "schema": { + "type": "integer", + "format": "int32", + "default": 10 + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Pagination.PaginationResult`1[[JustServe.Contracts.Responses.ProjectCard, JustServe.Contracts, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]" + } + } + } + } + } + } + }, + "/api/v1/organizations/{id}/{includeProjects}": { + "delete": { + "tags": [ + "Organization" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "includeProjects", + "in": "path", + "required": true, + "schema": { + "type": "boolean" + } + } + ], + "responses": { + "200": { + "description": "OK" + } + } + } + }, + "/api/v1/organizations/{id}/announcements": { + "post": { + "tags": [ + "Organization" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "content": { + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.CreateUpdateAnnouncementViewModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.CreateUpdateAnnouncementViewModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.CreateUpdateAnnouncementViewModel" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.CreateUpdateAnnouncementViewModel" + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + } + } + } + } + }, + "/api/v1/organizations/{id}/announcements/{announcementId}": { + "put": { + "tags": [ + "Organization" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "announcementId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "content": { + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.CreateUpdateAnnouncementViewModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.CreateUpdateAnnouncementViewModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.CreateUpdateAnnouncementViewModel" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.CreateUpdateAnnouncementViewModel" + } + } + } + }, + "responses": { + "200": { + "description": "OK" + } + } + }, + "delete": { + "tags": [ + "Organization" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "announcementId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK" + } + } + } + }, + "/api/v1/organizations/{organizationId}/announcements": { + "get": { + "tags": [ + "Organization" + ], + "parameters": [ + { + "name": "organizationId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK" + } + } + } + }, + "/api/v1/organizations/{organizationId}/follow/user/{userId}": { + "put": { + "tags": [ + "Organization" + ], + "parameters": [ + { + "name": "organizationId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "userId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK" + } + } + }, + "delete": { + "tags": [ + "Organization" + ], + "parameters": [ + { + "name": "organizationId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "userId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK" + } + } + } + }, + "/api/v1/organizations/{id}/associate/project/{projectId}": { + "put": { + "tags": [ + "Organization" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "projectId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK" + } + } + }, + "delete": { + "tags": [ + "Organization" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "projectId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK" + } + } + } + }, + "/api/v1/organizations/search": { + "post": { + "tags": [ + "Organization" + ], + "requestBody": { + "content": { + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.SearchOrganizationsViewModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.SearchOrganizationsViewModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.SearchOrganizationsViewModel" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.SearchOrganizationsViewModel" + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.OrganizationSearchResponse" + } + } + } + } + } + } + }, + "/api/v1/organizations/users/{userId}": { + "get": { + "tags": [ + "Organization" + ], + "parameters": [ + { + "name": "userId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.OrganizationSlim" + } + } + } + } + } + } + } + }, + "/api/v1/organizations/users/{userId}/assigned": { + "get": { + "tags": [ + "Organization" + ], + "parameters": [ + { + "name": "userId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.OrganizationSlim" + } + } + } + } + } + } + } + }, + "/api/v1/organizations/{organizationId}/owners": { + "get": { + "tags": [ + "Organization" + ], + "parameters": [ + { + "name": "organizationId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.UserSlim" + } + } + } + } + } + } + } + }, + "/api/v1/organizations/admin/search": { + "post": { + "tags": [ + "Organization" + ], + "requestBody": { + "content": { + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.AdminSearchOrganizationsViewModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.AdminSearchOrganizationsViewModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.AdminSearchOrganizationsViewModel" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.AdminSearchOrganizationsViewModel" + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.OrganizationSearchResults" + } + } + } + } + } + } + }, + "/api/v1/organizations/changeType": { + "post": { + "tags": [ + "Organization" + ], + "requestBody": { + "content": { + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.OrganizationTypeModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.OrganizationTypeModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.OrganizationTypeModel" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.OrganizationTypeModel" + } + } + } + }, + "responses": { + "200": { + "description": "OK" + } + } + } + }, + "/api/v1/organizations/vc/{id}/AddCause": { + "post": { + "tags": [ + "Organization" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "content": { + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Organizations.Cause" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Organizations.Cause" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Organizations.Cause" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Organizations.Cause" + } + } + } + }, + "responses": { + "200": { + "description": "OK" + } + } + } + }, + "/api/v1/organizations/vc/{id}/causes": { + "post": { + "tags": [ + "Organization" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "content": { + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Organizations.Cause" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Organizations.Cause" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Organizations.Cause" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Organizations.Cause" + } + } + } + }, + "responses": { + "200": { + "description": "OK" + } + } + } + }, + "/api/v1/organizations/vc/{id}/causes/{causeId}": { + "delete": { + "tags": [ + "Organization" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "causeId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK" + } + } + }, + "get": { + "tags": [ + "Organization" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "causeId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Organizations.Cause" + } + } + } + } + } + }, + "post": { + "tags": [ + "Organization" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "causeId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "content": { + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Organizations.Cause" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Organizations.Cause" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Organizations.Cause" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Organizations.Cause" + } + } + } + }, + "responses": { + "200": { + "description": "OK" + } + } + }, + "put": { + "tags": [ + "Organization" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "causeId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "content": { + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Organizations.Cause" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Organizations.Cause" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Organizations.Cause" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Organizations.Cause" + } + } + } + }, + "responses": { + "200": { + "description": "OK" + } + } + } + }, + "/api/v1/organizations/vc/{url}/causes/{causeId}": { + "get": { + "tags": [ + "Organization" + ], + "parameters": [ + { + "name": "url", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "causeId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Organizations.Cause" + } + } + } + } + } + } + }, + "/api/v1/organizations/vc/{id}/endorsements": { + "get": { + "tags": [ + "Organization" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.EndorsementOrgInfoSlim" + } + } + } + } + } + } + } + }, + "/api/v1/organizations/vc/{id}/endorsements/{organizationId}": { + "delete": { + "tags": [ + "Organization" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "organizationId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK" + } + } + } + }, + "/api/v1/organizations/endorsements/{id}/approve/{organizationId}/{approved}": { + "post": { + "tags": [ + "Organization" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "organizationId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "approved", + "in": "path", + "required": true, + "schema": { + "type": "boolean" + } + } + ], + "responses": { + "200": { + "description": "OK" + } + } + } + }, + "/api/v1/organizations/vc/{id}/endorsements/{organizationId}/approve": { + "post": { + "tags": [ + "Organization" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "organizationId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "approved", + "in": "query", + "schema": { + "type": "boolean" + } + } + ], + "responses": { + "200": { + "description": "OK" + } + } + } + }, + "/api/v1/organizations/vc/{id}/endorsements/{organizationId}/reject": { + "post": { + "tags": [ + "Organization" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "organizationId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK" + } + } + } + }, + "/api/v1/organizations/endorsements/{requestingOrganizationId}/request/{requestedOrganizationId}": { + "post": { + "tags": [ + "Organization" + ], + "parameters": [ + { + "name": "requestingOrganizationId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "requestedOrganizationId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK" + } + } + } + }, + "/api/v1/organizations/{organizationId}/liteInformation": { + "get": { + "tags": [ + "Organization" + ], + "parameters": [ + { + "name": "organizationId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.OrganizationLite" + } + } + } + } + } + } + }, + "/api/v2/organizations/user/{userId}/count": { + "get": { + "tags": [ + "Organization" + ], + "parameters": [ + { + "name": "userId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "integer", + "format": "int32" + } + } + } + } + } + } + }, + "/api/v1/privacyterms/{lang}/date": { + "get": { + "tags": [ + "PolicyTerms" + ], + "parameters": [ + { + "name": "lang", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.PrivacyTermsDates" + } + } + } + } + } + } + }, + "/api/v1/privacyterms/{lang}/date/{overrideCache}": { + "get": { + "tags": [ + "PolicyTerms" + ], + "parameters": [ + { + "name": "lang", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "overrideCache", + "in": "path", + "required": true, + "schema": { + "type": "boolean", + "default": false + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.PrivacyTermsDates" + } + } + } + } + } + } + }, + "/api/v1/terms/{lang}/date": { + "get": { + "tags": [ + "PolicyTerms" + ], + "parameters": [ + { + "name": "lang", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + } + } + } + } + }, + "/api/v1/terms/{lang}/date/{overrideCache}": { + "get": { + "tags": [ + "PolicyTerms" + ], + "parameters": [ + { + "name": "lang", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "overrideCache", + "in": "path", + "required": true, + "schema": { + "type": "boolean", + "default": false + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + } + } + } + } + }, + "/api/v1/privacy/{lang}/date": { + "get": { + "tags": [ + "PolicyTerms" + ], + "parameters": [ + { + "name": "lang", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + } + } + } + } + }, + "/api/v1/privacy/{lang}/date/{overrideCache}": { + "get": { + "tags": [ + "PolicyTerms" + ], + "parameters": [ + { + "name": "lang", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "overrideCache", + "in": "path", + "required": true, + "schema": { + "type": "boolean", + "default": false + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + } + } + } + } + }, + "/api/v1/terms/{lang}": { + "get": { + "tags": [ + "PolicyTerms" + ], + "parameters": [ + { + "name": "lang", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.PrivacyTerms" + } + } + } + } + } + } + }, + "/api/v1/terms/{lang}/{overrideSaved}": { + "get": { + "tags": [ + "PolicyTerms" + ], + "parameters": [ + { + "name": "lang", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "overrideSaved", + "in": "path", + "required": true, + "schema": { + "type": "boolean", + "default": false + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.PrivacyTerms" + } + } + } + } + } + } + }, + "/api/v1/privacy/{lang}": { + "get": { + "tags": [ + "PolicyTerms" + ], + "parameters": [ + { + "name": "lang", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.PrivacyTerms" + } + } + } + } + } + } + }, + "/api/v1/privacy/{lang}/{overrideSaved}": { + "get": { + "tags": [ + "PolicyTerms" + ], + "parameters": [ + { + "name": "lang", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "overrideSaved", + "in": "path", + "required": true, + "schema": { + "type": "boolean", + "default": false + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.PrivacyTerms" + } + } + } + } + } + } + }, + "/api/exceptions/400/custom": { + "get": { + "tags": [ + "ProblemDetails" + ], + "responses": { + "200": { + "description": "OK" + } + } + } + }, + "/api/exceptions/400/vanilla": { + "get": { + "tags": [ + "ProblemDetails" + ], + "responses": { + "200": { + "description": "OK" + } + } + } + }, + "/api/exceptions/400": { + "get": { + "tags": [ + "ProblemDetails" + ], + "responses": { + "200": { + "description": "OK" + } + } + } + }, + "/api/exceptions/401": { + "get": { + "tags": [ + "ProblemDetails" + ], + "responses": { + "200": { + "description": "OK" + } + } + } + }, + "/api/exceptions/403": { + "get": { + "tags": [ + "ProblemDetails" + ], + "responses": { + "200": { + "description": "OK" + } + } + } + }, + "/api/exceptions/404": { + "get": { + "tags": [ + "ProblemDetails" + ], + "responses": { + "200": { + "description": "OK" + } + } + } + }, + "/api/exceptions/417": { + "get": { + "tags": [ + "ProblemDetails" + ], + "responses": { + "200": { + "description": "OK" + } + } + } + }, + "/api/exceptions/422": { + "get": { + "tags": [ + "ProblemDetails" + ], + "responses": { + "200": { + "description": "OK" + } + } + } + }, + "/api/exceptions/500": { + "get": { + "tags": [ + "ProblemDetails" + ], + "responses": { + "200": { + "description": "OK" + } + } + } + }, + "/api/exceptions/500/custom": { + "get": { + "tags": [ + "ProblemDetails" + ], + "responses": { + "200": { + "description": "OK" + } + } + } + }, + "/api/exceptions/501": { + "get": { + "tags": [ + "ProblemDetails" + ], + "responses": { + "200": { + "description": "OK" + } + } + } + }, + "/api/exceptions/504": { + "get": { + "tags": [ + "ProblemDetails" + ], + "responses": { + "200": { + "description": "OK" + } + } + } + }, + "/api/v1/projects/{projectId}/status/{status}": { + "get": { + "tags": [ + "Projects" + ], + "parameters": [ + { + "name": "projectId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "status", + "in": "path", + "required": true, + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Enums.ProjectStatus" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Projects.Project" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Projects.Project" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Projects.Project" + } + } + } + } + } + } + }, + "/api/v1/projects/{projectId}/calendar": { + "get": { + "tags": [ + "Projects" + ], + "parameters": [ + { + "name": "projectId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.CalendarProjectResponse" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.CalendarProjectResponse" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.CalendarProjectResponse" + } + } + } + } + } + } + }, + "/api/v1/projects": { + "post": { + "tags": [ + "Projects" + ], + "parameters": [ + { + "name": "organizationId", + "in": "query", + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Projects.Project" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Projects.Project" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Projects.Project" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Projects.Project" + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Projects.Project" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Projects.Project" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Projects.Project" + } + } + } + } + } + } + }, + "/api/v1/projects/organization/{organizationId}": { + "post": { + "tags": [ + "Projects" + ], + "parameters": [ + { + "name": "organizationId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Projects.Project" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Projects.Project" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Projects.Project" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Projects.Project" + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Projects.Project" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Projects.Project" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Projects.Project" + } + } + } + } + } + } + }, + "/api/v1/projects/user/{userId}": { + "get": { + "tags": [ + "Projects" + ], + "parameters": [ + { + "name": "userId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.ProjectSlim" + } + } + }, + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.ProjectSlim" + } + } + }, + "text/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.ProjectSlim" + } + } + } + } + } + } + } + }, + "/api/v2/projects/user/{userId}/count": { + "get": { + "tags": [ + "Projects" + ], + "parameters": [ + { + "name": "userId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "type": "integer", + "format": "int32" + } + }, + "application/json": { + "schema": { + "type": "integer", + "format": "int32" + } + }, + "text/json": { + "schema": { + "type": "integer", + "format": "int32" + } + } + } + } + } + } + }, + "/api/v1/projects/user/{userId}/all": { + "post": { + "tags": [ + "Projects" + ], + "parameters": [ + { + "name": "userId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.SearchAdminProjectsViewModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.SearchAdminProjectsViewModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.SearchAdminProjectsViewModel" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.SearchAdminProjectsViewModel" + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.ProjectsSlimSearchResults" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.ProjectsSlimSearchResults" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.ProjectsSlimSearchResults" + } + } + } + } + }, + "deprecated": true + } + }, + "/api/v1/projects/user/{userId}/pendingTemplateOrDraft": { + "post": { + "tags": [ + "Projects" + ], + "parameters": [ + { + "name": "userId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.SearchAdminProjectsViewModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.SearchAdminProjectsViewModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.SearchAdminProjectsViewModel" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.SearchAdminProjectsViewModel" + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.ProjectsSlimSearchResults" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.ProjectsSlimSearchResults" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.ProjectsSlimSearchResults" + } + } + } + } + } + } + }, + "/api/v1/projects/{projectId}": { + "post": { + "tags": [ + "Projects" + ], + "parameters": [ + { + "name": "projectId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "lang", + "in": "query", + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.LatLongPostal" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.LatLongPostal" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.LatLongPostal" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.LatLongPostal" + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Projects.Project" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Projects.Project" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Projects.Project" + } + } + } + } + } + }, + "get": { + "tags": [ + "Projects" + ], + "parameters": [ + { + "name": "projectId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "lang", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "name": "userSearchLat", + "in": "query", + "schema": { + "type": "number", + "format": "double", + "default": 999 + } + }, + { + "name": "userSearchLong", + "in": "query", + "schema": { + "type": "number", + "format": "double", + "default": 999 + } + }, + { + "name": "userPostalCode", + "in": "query", + "schema": { + "type": "string", + "default": "" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Projects.Project" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Projects.Project" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Projects.Project" + } + } + } + } + } + } + }, + "/api/v1/projects/{projectId}/{lang}": { + "post": { + "tags": [ + "Projects" + ], + "parameters": [ + { + "name": "projectId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "lang", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.LatLongPostal" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.LatLongPostal" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.LatLongPostal" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.LatLongPostal" + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Projects.Project" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Projects.Project" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Projects.Project" + } + } + } + } + } + }, + "get": { + "tags": [ + "Projects" + ], + "parameters": [ + { + "name": "projectId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "lang", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "userSearchLat", + "in": "query", + "schema": { + "type": "number", + "format": "double", + "default": 999 + } + }, + { + "name": "userSearchLong", + "in": "query", + "schema": { + "type": "number", + "format": "double", + "default": 999 + } + }, + { + "name": "userPostalCode", + "in": "query", + "schema": { + "type": "string", + "default": "" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Projects.Project" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Projects.Project" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Projects.Project" + } + } + } + } + } + } + }, + "/api/v1/projects/{id}/volunteers/csv": { + "get": { + "tags": [ + "Projects" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "type": "string", + "format": "binary" + } + }, + "application/json": { + "schema": { + "type": "string", + "format": "binary" + } + }, + "text/json": { + "schema": { + "type": "string", + "format": "binary" + } + } + } + } + } + } + }, + "/api/v1/projects/{projectId}/volunteers": { + "get": { + "tags": [ + "Projects" + ], + "parameters": [ + { + "name": "projectId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.ProjectVolunteersInterested" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.ProjectVolunteersInterested" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.ProjectVolunteersInterested" + } + } + } + } + } + } + }, + "/api/v1/projects/{projectId}/summary": { + "get": { + "tags": [ + "Projects" + ], + "parameters": [ + { + "name": "projectId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "lang", + "in": "query", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.ProjectResponse" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.ProjectResponse" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.ProjectResponse" + } + } + } + } + } + } + }, + "/api/v1/projects/{projectId}/summary/{lang}": { + "get": { + "tags": [ + "Projects" + ], + "parameters": [ + { + "name": "projectId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "lang", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.ProjectResponse" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.ProjectResponse" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.ProjectResponse" + } + } + } + } + } + } + }, + "/api/v1/projects/{projectId}/users": { + "get": { + "tags": [ + "Projects" + ], + "parameters": [ + { + "name": "projectId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Users.User" + } + } + }, + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Users.User" + } + } + }, + "text/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Users.User" + } + } + } + } + } + } + } + }, + "/api/v1/projects/{id}/status/{status}": { + "put": { + "tags": [ + "Projects" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "status", + "in": "path", + "required": true, + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Enums.ProjectStatus" + } + } + ], + "requestBody": { + "content": { + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.StatusChangeViewModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.StatusChangeViewModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.StatusChangeViewModel" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.StatusChangeViewModel" + } + } + } + }, + "responses": { + "200": { + "description": "OK" + } + } + } + }, + "/api/v1/projects/{id}/unlist/{unlisted}": { + "put": { + "tags": [ + "Projects" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "unlisted", + "in": "path", + "required": true, + "schema": { + "type": "boolean" + } + } + ], + "responses": { + "200": { + "description": "OK" + } + } + } + }, + "/api/v1/projects/{id}": { + "put": { + "tags": [ + "Projects" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "organizationId", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "name": "sendUpdate", + "in": "query", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "requestBody": { + "content": { + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Projects.Project" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Projects.Project" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Projects.Project" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Projects.Project" + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Projects.Project" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Projects.Project" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Projects.Project" + } + } + } + } + } + }, + "delete": { + "tags": [ + "Projects" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK" + } + } + } + }, + "/api/v1/projects/{id}/organization/{organizationId}": { + "put": { + "tags": [ + "Projects" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "organizationId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "sendUpdate", + "in": "query", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "requestBody": { + "content": { + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Projects.Project" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Projects.Project" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Projects.Project" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Projects.Project" + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Projects.Project" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Projects.Project" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Projects.Project" + } + } + } + } + } + } + }, + "/api/v1/projects/{id}/{sendUpdate}": { + "put": { + "tags": [ + "Projects" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "organizationId", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "name": "sendUpdate", + "in": "path", + "required": true, + "schema": { + "type": "boolean", + "default": false + } + } + ], + "requestBody": { + "content": { + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Projects.Project" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Projects.Project" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Projects.Project" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Projects.Project" + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Projects.Project" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Projects.Project" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Projects.Project" + } + } + } + } + } + } + }, + "/api/v1/projects/{id}/organization/{organizationId}/{sendUpdate}": { + "put": { + "tags": [ + "Projects" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "organizationId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "sendUpdate", + "in": "path", + "required": true, + "schema": { + "type": "boolean", + "default": false + } + } + ], + "requestBody": { + "content": { + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Projects.Project" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Projects.Project" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Projects.Project" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Projects.Project" + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Projects.Project" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Projects.Project" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Projects.Project" + } + } + } + } + } + } + }, + "/api/v1/projects/{id}/users/{userId}": { + "put": { + "tags": [ + "Projects" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "userId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK" + } + } + } + }, + "/api/v1/projects/{id}/organization/{organizationId}/assign": { + "put": { + "tags": [ + "Projects" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "organizationId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK" + } + } + } + }, + "/api/v1/projects/{id}/users/reassignAndDelete": { + "put": { + "tags": [ + "Projects" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "content": { + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Projects.ReassignDelete" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Projects.ReassignDelete" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Projects.ReassignDelete" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Projects.ReassignDelete" + } + } + } + }, + "responses": { + "200": { + "description": "OK" + } + } + } + }, + "/api/v1/projects/{id}/organization/reassignAndDelete": { + "put": { + "tags": [ + "Projects" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Projects.ReassignDelete" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Projects.ReassignDelete" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Projects.ReassignDelete" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Projects.ReassignDelete" + } + } + } + }, + "responses": { + "200": { + "description": "OK" + } + } + } + }, + "/api/v1/projects/admin/search": { + "post": { + "tags": [ + "Projects" + ], + "requestBody": { + "content": { + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.SearchAdminProjectsViewModelv2" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.SearchAdminProjectsViewModelv2" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.SearchAdminProjectsViewModelv2" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.SearchAdminProjectsViewModelv2" + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.ProjectsSlimSearchResults" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.ProjectsSlimSearchResults" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.ProjectsSlimSearchResults" + } + } + } + } + } + } + }, + "/api/v2/projects/search": { + "post": { + "tags": [ + "Projects" + ], + "requestBody": { + "content": { + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.SearchProjectsViewModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.SearchProjectsViewModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.SearchProjectsViewModel" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.SearchProjectsViewModel" + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Pagination.PaginationProjectSearchResult`1[[System.Collections.Generic.IEnumerable`1[[JustServe.Contracts.Responses.ProjectCard, JustServe.Contracts, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]]" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Pagination.PaginationProjectSearchResult`1[[System.Collections.Generic.IEnumerable`1[[JustServe.Contracts.Responses.ProjectCard, JustServe.Contracts, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]]" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Pagination.PaginationProjectSearchResult`1[[System.Collections.Generic.IEnumerable`1[[JustServe.Contracts.Responses.ProjectCard, JustServe.Contracts, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]]" + } + } + } + } + } + } + }, + "/api/v1/projects/{id}/user/{userId}/favorite": { + "put": { + "tags": [ + "Projects" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "userId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK" + } + } + }, + "delete": { + "tags": [ + "Projects" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "userId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK" + } + } + } + }, + "/api/v1/projects/user/{userId}/sponsored": { + "get": { + "tags": [ + "Projects" + ], + "parameters": [ + { + "name": "userId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.ProjectsAndIdList" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.ProjectsAndIdList" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.ProjectsAndIdList" + } + } + } + } + } + } + }, + "/api/v1/projects/{id}/volunteer/{userId}": { + "put": { + "tags": [ + "Projects" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "userId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.VolunteerViewModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.VolunteerViewModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.VolunteerViewModel" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.VolunteerViewModel" + } + } + } + }, + "responses": { + "200": { + "description": "OK" + } + } + }, + "delete": { + "tags": [ + "Projects" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "userId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK" + } + } + } + }, + "/api/v1/projects/{projectId}/volunteer/{volunteerUserId}/recurring/{projectEventId}": { + "put": { + "tags": [ + "Projects" + ], + "parameters": [ + { + "name": "projectId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "volunteerUserId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "projectEventId", + "in": "query", + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.VolunteerRecurringViewModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.VolunteerRecurringViewModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.VolunteerRecurringViewModel" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.VolunteerRecurringViewModel" + } + } + } + }, + "responses": { + "200": { + "description": "OK" + } + } + } + }, + "/api/v1/projects/{id}/ongoing/{ongoingId}/interest/{userId}": { + "put": { + "tags": [ + "Projects" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "ongoingId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "userId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.OngoingInterestViewModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.OngoingInterestViewModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.OngoingInterestViewModel" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.OngoingInterestViewModel" + } + } + } + }, + "responses": { + "200": { + "description": "OK" + } + } + } + }, + "/api/v1/projects/{projectId}/volunteer/manual/{projectEventId}": { + "put": { + "tags": [ + "Projects" + ], + "parameters": [ + { + "name": "projectId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "projectEventId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.VolunteerManualModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.VolunteerManualModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.VolunteerManualModel" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.VolunteerManualModel" + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.VolunteerDetails" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.VolunteerDetails" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.VolunteerDetails" + } + } + } + } + } + } + }, + "/api/v1/projects/{id}/recurring/volunteer/{userId}/{eventId}": { + "delete": { + "tags": [ + "Projects" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "dtlId", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "name": "userId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "eventId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK" + } + } + } + }, + "/api/v1/projects/{id}/dtl/{dtlId}/volunteer/{userId}/{eventId}": { + "delete": { + "tags": [ + "Projects" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "dtlId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "userId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "eventId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK" + } + } + } + }, + "/api/v1/projects/{id}/ongoing/{ongoingId}/interest/{interestedId}": { + "delete": { + "tags": [ + "Projects" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "ongoingId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "interestedId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK" + } + } + } + }, + "/api/v2/projects/{projectId}/volunteers/{volunteerId}": { + "delete": { + "tags": [ + "Projects" + ], + "parameters": [ + { + "name": "projectId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "volunteerId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK" + } + } + } + }, + "/api/v1/projects/{id}/volunteer/external": { + "put": { + "tags": [ + "Projects" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK" + } + } + } + }, + "/api/v1/projects/{id}/dtl/{dtlId}/timeslot/{timeSlotId}/user/{userId}": { + "put": { + "tags": [ + "Projects" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "dtlId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "timeSlotId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "userId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.HoursServedItemViewModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.HoursServedItemViewModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.HoursServedItemViewModel" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.HoursServedItemViewModel" + } + } + } + }, + "responses": { + "200": { + "description": "OK" + } + } + } + }, + "/api/v1/projects/{projectId}/ongoing/{ongoingId}/user/{userId}": { + "put": { + "tags": [ + "Projects" + ], + "parameters": [ + { + "name": "projectId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "ongoingId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "userId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.HoursServedViewModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.HoursServedViewModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.HoursServedViewModel" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.HoursServedViewModel" + } + } + } + }, + "responses": { + "200": { + "description": "OK" + } + } + } + }, + "/api/v1/projects/{id}/target/{targetId}/hours": { + "put": { + "tags": [ + "Projects" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "targetId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "content": { + "application/json-patch+json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.HoursServedBulkModel" + } + } + }, + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.HoursServedBulkModel" + } + } + }, + "text/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.HoursServedBulkModel" + } + } + }, + "application/*+json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.HoursServedBulkModel" + } + } + } + } + }, + "responses": { + "200": { + "description": "OK" + } + } + } + }, + "/api/v1/projects/skills/{language}/{countryCode}": { + "get": { + "tags": [ + "Projects" + ], + "parameters": [ + { + "name": "language", + "in": "path", + "required": true, + "schema": { + "type": "string", + "default": "en-us" + } + }, + { + "name": "countryCode", + "in": "query", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/json": { + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "text/json": { + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + } + } + }, + "/api/v1/projects/allfilters/{language}/{countryCode}": { + "get": { + "tags": [ + "Projects" + ], + "parameters": [ + { + "name": "language", + "in": "path", + "required": true, + "schema": { + "type": "string", + "default": "en-us" + } + }, + { + "name": "countryCode", + "in": "query", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/json": { + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "text/json": { + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + } + } + }, + "/api/v1/projects/allProjectfilters/{language}/{countryCode}": { + "get": { + "tags": [ + "Projects" + ], + "parameters": [ + { + "name": "language", + "in": "path", + "required": true, + "schema": { + "type": "string", + "default": "en-us" + } + }, + { + "name": "countryCode", + "in": "query", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/json": { + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "text/json": { + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + } + } + }, + "/api/v1/projects/organization/search/{id}": { + "post": { + "tags": [ + "Projects" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "page", + "in": "query", + "schema": { + "type": "integer", + "format": "int32", + "default": 0 + } + }, + { + "name": "size", + "in": "query", + "schema": { + "type": "integer", + "format": "int32", + "default": 10 + } + }, + { + "name": "includeExpired", + "in": "query", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.ProjectSearchResponse" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.ProjectSearchResponse" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.ProjectSearchResponse" + } + } + } + } + } + } + }, + "/api/v1/projects/organization/search/{id}/{includeExpired}": { + "post": { + "tags": [ + "Projects" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "page", + "in": "query", + "schema": { + "type": "integer", + "format": "int32", + "default": 0 + } + }, + { + "name": "size", + "in": "query", + "schema": { + "type": "integer", + "format": "int32", + "default": 10 + } + }, + { + "name": "includeExpired", + "in": "path", + "required": true, + "schema": { + "type": "boolean", + "default": false + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.ProjectSearchResponse" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.ProjectSearchResponse" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.ProjectSearchResponse" + } + } + } + } + } + } + }, + "/api/v1/projects/organization/search/{id}/{page}/{size}": { + "post": { + "tags": [ + "Projects" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "page", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32", + "default": 0 + } + }, + { + "name": "size", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32", + "default": 10 + } + }, + { + "name": "includeExpired", + "in": "query", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.ProjectSearchResponse" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.ProjectSearchResponse" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.ProjectSearchResponse" + } + } + } + } + } + } + }, + "/api/v1/projects/organization/search/{id}/{page}/{size}/{includeExpired}": { + "post": { + "tags": [ + "Projects" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "page", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32", + "default": 0 + } + }, + { + "name": "size", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32", + "default": 10 + } + }, + { + "name": "includeExpired", + "in": "path", + "required": true, + "schema": { + "type": "boolean", + "default": false + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.ProjectSearchResponse" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.ProjectSearchResponse" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.ProjectSearchResponse" + } + } + } + } + } + } + }, + "/api/v1/projects/{id}/user/{adminId}/authorized/{authorize}": { + "get": { + "tags": [ + "Projects" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "adminId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "authorize", + "in": "path", + "required": true, + "schema": { + "type": "boolean" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Projects.Project" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Projects.Project" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Projects.Project" + } + } + } + } + } + } + }, + "/api/v1/projects/createFromTemplate/{id}": { + "post": { + "tags": [ + "Projects" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Projects.Project" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Projects.Project" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Projects.Project" + } + } + } + } + } + } + }, + "/api/v1/projects/{id}/dtl/{dtlId}/volunteer/{userId}/{timeSlotId}/printvalidation": { + "get": { + "tags": [ + "Projects" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "dtlId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "userId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "projectEventId", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "name": "timeSlotId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK" + } + } + } + }, + "/api/v1/GetTopCityProjectCounts/{browserLocale}": { + "get": { + "tags": [ + "Projects" + ], + "parameters": [ + { + "name": "browserLocale", + "in": "path", + "required": true, + "schema": { + "type": "string", + "default": "en-US" + } + }, + { + "name": "refreshCache", + "in": "query", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.CountryCountsResponse" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.CountryCountsResponse" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.CountryCountsResponse" + } + } + } + } + } + } + }, + "/api/v1/GetTopCityProjectCounts/{browserLocale}/{refreshCache}": { + "get": { + "tags": [ + "Projects" + ], + "parameters": [ + { + "name": "browserLocale", + "in": "path", + "required": true, + "schema": { + "type": "string", + "default": "en-US" + } + }, + { + "name": "refreshCache", + "in": "path", + "required": true, + "schema": { + "type": "boolean", + "default": false + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.CountryCountsResponse" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.CountryCountsResponse" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.CountryCountsResponse" + } + } + } + } + } + } + }, + "/api/v1/GetTopCityOrgCounts/{browserLocale}": { + "get": { + "tags": [ + "Projects" + ], + "parameters": [ + { + "name": "browserLocale", + "in": "path", + "required": true, + "schema": { + "type": "string", + "default": "en-US" + } + }, + { + "name": "refreshCache", + "in": "query", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.CountryCountsResponse" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.CountryCountsResponse" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.CountryCountsResponse" + } + } + } + } + } + } + }, + "/api/v1/GetTopCityOrgCounts/{browserLocale}/{refreshCache}": { + "get": { + "tags": [ + "Projects" + ], + "parameters": [ + { + "name": "browserLocale", + "in": "path", + "required": true, + "schema": { + "type": "string", + "default": "en-US" + } + }, + { + "name": "refreshCache", + "in": "path", + "required": true, + "schema": { + "type": "boolean", + "default": false + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.CountryCountsResponse" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.CountryCountsResponse" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.CountryCountsResponse" + } + } + } + } + } + } + }, + "/api/v1/projects/HomepageSearch": { + "post": { + "tags": [ + "Projects" + ], + "requestBody": { + "content": { + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.HomepageProjectRequest" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.HomepageProjectRequest" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.HomepageProjectRequest" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.HomepageProjectRequest" + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.HomepageProjectInfo" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.HomepageProjectInfo" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.HomepageProjectInfo" + } + } + } + } + } + } + }, + "/api/v1/projects/searchByTitle": { + "post": { + "tags": [ + "Projects" + ], + "requestBody": { + "content": { + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.SearchProjectsGlobalViewModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.SearchProjectsGlobalViewModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.SearchProjectsGlobalViewModel" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.SearchProjectsGlobalViewModel" + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.SearchResponseObject" + } + } + }, + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.SearchResponseObject" + } + } + }, + "text/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.SearchResponseObject" + } + } + } + } + } + } + } + }, + "/api/v1/projects/admin/{userId}/search/{page}/{size}": { + "get": { + "tags": [ + "Projects" + ], + "parameters": [ + { + "name": "userId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "page", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "size", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "status", + "in": "query", + "schema": { + "type": "array", + "items": { + "type": "integer", + "format": "int32" + } + } + }, + { + "name": "title", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "name": "loc", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "name": "locMod", + "in": "query", + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "start", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "name": "startMod", + "in": "query", + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "end", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "name": "endMod", + "in": "query", + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "org", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "name": "ldesc", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "name": "unlisted", + "in": "query", + "schema": { + "type": "boolean" + } + }, + { + "name": "expired", + "in": "query", + "schema": { + "type": "boolean" + } + }, + { + "name": "user", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "name": "uEmail", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "name": "userMods", + "in": "query", + "schema": { + "type": "array", + "items": { + "type": "integer", + "format": "int32" + } + } + }, + { + "name": "uEmailMods", + "in": "query", + "schema": { + "type": "array", + "items": { + "type": "integer", + "format": "int32" + } + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Pagination.PaginationResult`1[[System.Collections.Generic.IEnumerable`1[[JustServe.Contracts.Responses.ProjectAdmin, JustServe.Contracts, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]]" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Pagination.PaginationResult`1[[System.Collections.Generic.IEnumerable`1[[JustServe.Contracts.Responses.ProjectAdmin, JustServe.Contracts, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]]" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Pagination.PaginationResult`1[[System.Collections.Generic.IEnumerable`1[[JustServe.Contracts.Responses.ProjectAdmin, JustServe.Contracts, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]]" + } + } + } + } + } + } + }, + "/api/v1/projects/{projectId}/ownerLog": { + "get": { + "tags": [ + "Projects" + ], + "parameters": [ + { + "name": "projectId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Logging.ProjectOwnerLog" + } + } + }, + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Logging.ProjectOwnerLog" + } + } + }, + "text/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Logging.ProjectOwnerLog" + } + } + } + } + } + } + } + }, + "/api/v1/projects/clone": { + "post": { + "tags": [ + "Projects" + ], + "requestBody": { + "content": { + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.CloneProjectRequest" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.CloneProjectRequest" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.CloneProjectRequest" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.CloneProjectRequest" + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "type": "string", + "format": "uuid" + } + }, + "application/json": { + "schema": { + "type": "string", + "format": "uuid" + } + }, + "text/json": { + "schema": { + "type": "string", + "format": "uuid" + } + } + } + } + } + } + }, + "/api/v1/projects/{projectId}/basicInformation": { + "get": { + "tags": [ + "Projects" + ], + "parameters": [ + { + "name": "projectId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.ProjectBasicInformation" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.ProjectBasicInformation" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.ProjectBasicInformation" + } + } + } + } + } + } + }, + "/api/v2/projects/volunteers/search": { + "get": { + "tags": [ + "Projects" + ], + "parameters": [ + { + "name": "ProjectId", + "in": "query", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "From", + "in": "query", + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "To", + "in": "query", + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "ProjectEventId", + "in": "query", + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "VolunteerName", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "name": "VolunteerEmail", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "name": "VolunteerPhone", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "name": "Note", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "name": "Skills", + "in": "query", + "schema": { + "type": "array", + "items": { + "type": "integer", + "format": "int32" + } + } + }, + { + "name": "GroupSize", + "in": "query", + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "GroupSizeModifier", + "in": "query", + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "Page", + "in": "query", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "Size", + "in": "query", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Pagination.PaginationResult`1[[System.Collections.Generic.IEnumerable`1[[JustServe.Contracts.Responses.VolunteerLiteDetails, JustServe.Contracts, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]]" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Pagination.PaginationResult`1[[System.Collections.Generic.IEnumerable`1[[JustServe.Contracts.Responses.VolunteerLiteDetails, JustServe.Contracts, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]]" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Pagination.PaginationResult`1[[System.Collections.Generic.IEnumerable`1[[JustServe.Contracts.Responses.VolunteerLiteDetails, JustServe.Contracts, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]]" + } + } + } + } + } + } + }, + "/api/v1/projects/{projectId}/events/search": { + "get": { + "tags": [ + "Projects" + ], + "parameters": [ + { + "name": "projectId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "ProjectId", + "in": "query", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "ProjectEventId", + "in": "query", + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "FromTime", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "name": "ToTime", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "name": "From", + "in": "query", + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "To", + "in": "query", + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "VolunteerResponsibility", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "name": "ProjectEventStatus", + "in": "query", + "schema": { + "type": "array", + "items": { + "type": "integer", + "format": "int32" + } + } + }, + { + "name": "Page", + "in": "query", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "Size", + "in": "query", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Pagination.PaginationResult`1[[System.Collections.Generic.IEnumerable`1[[JustServe.Contracts.Responses.ProjectEventCustom, JustServe.Contracts, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]]" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Pagination.PaginationResult`1[[System.Collections.Generic.IEnumerable`1[[JustServe.Contracts.Responses.ProjectEventCustom, JustServe.Contracts, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]]" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Pagination.PaginationResult`1[[System.Collections.Generic.IEnumerable`1[[JustServe.Contracts.Responses.ProjectEventCustom, JustServe.Contracts, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]]" + } + } + } + } + } + } + }, + "/api/v2/projects/{projectId}/events/{projectEventId}/volunteers/{projectVolunteerId}/hours": { + "post": { + "tags": [ + "Projects" + ], + "parameters": [ + { + "name": "projectId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "projectEventId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "projectVolunteerId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "content": { + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.UpsertProjectVolunteerHoursRequest" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.UpsertProjectVolunteerHoursRequest" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.UpsertProjectVolunteerHoursRequest" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.UpsertProjectVolunteerHoursRequest" + } + } + } + }, + "responses": { + "200": { + "description": "OK" + } + } + } + }, + "/api/downloads/en-us/PD60006060-JustServe-Benefits-For-Teens-Who-Serve-ENG.pdf": { + "get": { + "tags": [ + "Redirects" + ], + "responses": { + "200": { + "description": "OK" + } + } + } + }, + "/api/downloads/en-us/PD60006367-JustServe-Styleguide-Short-ENG.pdf": { + "get": { + "tags": [ + "Redirects" + ], + "responses": { + "200": { + "description": "OK" + } + } + } + }, + "/api/downloads/en-us/PD60012420-JustServe-Life-Benefits-of-Service-ENG.pdf": { + "get": { + "tags": [ + "Redirects" + ], + "responses": { + "200": { + "description": "OK" + } + } + } + }, + "/api/v1/resources/all/{lang}": { + "get": { + "tags": [ + "Resource" + ], + "parameters": [ + { + "name": "lang", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.Resource" + } + } + }, + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.Resource" + } + } + }, + "text/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.Resource" + } + } + } + } + } + } + } + }, + "/api/v1/stories/search": { + "post": { + "tags": [ + "Stories" + ], + "requestBody": { + "content": { + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.StoriesSearchViewModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.StoriesSearchViewModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.StoriesSearchViewModel" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.StoriesSearchViewModel" + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.StoryLimited" + } + } + }, + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.StoryLimited" + } + } + }, + "text/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.StoryLimited" + } + } + } + } + } + } + } + }, + "/api/v1/stories/{successStoryId}": { + "get": { + "tags": [ + "Stories" + ], + "parameters": [ + { + "name": "successStoryId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Story" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Story" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Story" + } + } + } + } + } + }, + "delete": { + "tags": [ + "Stories" + ], + "parameters": [ + { + "name": "successStoryId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK" + } + } + }, + "put": { + "tags": [ + "Stories" + ], + "parameters": [ + { + "name": "successStoryId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "content": { + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.SuccessStoryViewModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.SuccessStoryViewModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.SuccessStoryViewModel" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.SuccessStoryViewModel" + } + } + } + }, + "responses": { + "200": { + "description": "OK" + } + } + } + }, + "/api/v1/stories": { + "post": { + "tags": [ + "Stories" + ], + "requestBody": { + "content": { + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.SuccessStoryViewModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.SuccessStoryViewModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.SuccessStoryViewModel" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.SuccessStoryViewModel" + } + } + } + }, + "responses": { + "200": { + "description": "OK" + } + } + } + }, + "/api/v1/stories/admin/{userId}": { + "post": { + "tags": [ + "Stories" + ], + "parameters": [ + { + "name": "userId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.SearchAdminStoriesViewModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.SearchAdminStoriesViewModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.SearchAdminStoriesViewModel" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.SearchAdminStoriesViewModel" + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.StorySearchResults" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.StorySearchResults" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.StorySearchResults" + } + } + } + } + } + } + }, + "/api/v1/timezones/all": { + "get": { + "tags": [ + "TimeZone" + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Vanilla.TimeZone.TimeZoneEnum" + } + } + }, + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Vanilla.TimeZone.TimeZoneEnum" + } + } + }, + "text/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Vanilla.TimeZone.TimeZoneEnum" + } + } + } + } + } + } + } + }, + "/api/v1/timezones/name": { + "get": { + "tags": [ + "TimeZone" + ], + "parameters": [ + { + "name": "iana", + "in": "query", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Vanilla.TimeZone.TimeZoneEnum" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Vanilla.TimeZone.TimeZoneEnum" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Vanilla.TimeZone.TimeZoneEnum" + } + } + } + } + } + } + }, + "/api/v1/timezones/coordinates": { + "get": { + "tags": [ + "TimeZone" + ], + "parameters": [ + { + "name": "latitude", + "in": "query", + "schema": { + "type": "number", + "format": "double" + } + }, + { + "name": "longitude", + "in": "query", + "schema": { + "type": "number", + "format": "double" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Vanilla.TimeZone.TimeZoneEnum" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Vanilla.TimeZone.TimeZoneEnum" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Vanilla.TimeZone.TimeZoneEnum" + } + } + } + } + } + } + }, + "/api/v1/token": { + "post": { + "tags": [ + "Token" + ], + "responses": { + "200": { + "description": "OK" + } + } + } + }, + "/api/v1/users/activation/{token}": { + "get": { + "tags": [ + "User" + ], + "parameters": [ + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK" + } + } + } + }, + "/api/v1/users/{userId}/activate": { + "get": { + "tags": [ + "User" + ], + "parameters": [ + { + "name": "userId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK" + } + } + } + }, + "/api/v1/users/{targetUserId}/password": { + "put": { + "tags": [ + "User" + ], + "parameters": [ + { + "name": "targetUserId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.ChangePasswordViewModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.ChangePasswordViewModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.ChangePasswordViewModel" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.ChangePasswordViewModel" + } + } + } + }, + "responses": { + "200": { + "description": "OK" + } + } + } + }, + "/api/v1/users/{id}/lang/{lang}": { + "put": { + "tags": [ + "User" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "lang", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "type": "string" + } + }, + "application/json": { + "schema": { + "type": "string" + } + }, + "text/json": { + "schema": { + "type": "string" + } + } + } + } + } + } + }, + "/api/v1/users/{userId}/clean": { + "get": { + "tags": [ + "User" + ], + "parameters": [ + { + "name": "userId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK" + } + } + } + }, + "/api/v1/users/{userId}/recordofservice": { + "post": { + "tags": [ + "User" + ], + "parameters": [ + { + "name": "userId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Projects.RecordOfService" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Projects.RecordOfService" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Projects.RecordOfService" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Projects.RecordOfService" + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "type": "string" + } + }, + "application/json": { + "schema": { + "type": "string" + } + }, + "text/json": { + "schema": { + "type": "string" + } + } + } + } + } + }, + "put": { + "tags": [ + "User" + ], + "parameters": [ + { + "name": "userId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Projects.RecordOfService" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Projects.RecordOfService" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Projects.RecordOfService" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Projects.RecordOfService" + } + } + } + }, + "responses": { + "200": { + "description": "OK" + } + } + } + }, + "/api/v1/users/{userId}/recordofservice/{recordOfServiceId}": { + "delete": { + "tags": [ + "User" + ], + "parameters": [ + { + "name": "userId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "recordOfServiceId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK" + } + } + } + }, + "/api/v1/users/{userId}": { + "delete": { + "tags": [ + "User" + ], + "parameters": [ + { + "name": "userId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK" + } + } + }, + "get": { + "tags": [ + "User" + ], + "parameters": [ + { + "name": "userId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.UserResult" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.UserResult" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.UserResult" + } + } + } + } + } + }, + "put": { + "tags": [ + "User" + ], + "parameters": [ + { + "name": "userId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.UpdateUserModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.UpdateUserModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.UpdateUserModel" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.UpdateUserModel" + } + } + } + }, + "responses": { + "200": { + "description": "OK" + } + } + } + }, + "/api/v2/users/{userId}/activeProjects/{page}/{size}": { + "get": { + "tags": [ + "User" + ], + "parameters": [ + { + "name": "userId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "page", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32", + "default": 0 + } + }, + { + "name": "size", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32", + "default": 10 + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.ProjectCard" + } + } + }, + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.ProjectCard" + } + } + }, + "text/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.ProjectCard" + } + } + } + } + } + } + } + }, + "/api/v2/users/{userId}/activeProjects": { + "get": { + "tags": [ + "User" + ], + "parameters": [ + { + "name": "userId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "page", + "in": "query", + "schema": { + "type": "integer", + "format": "int32", + "default": 0 + } + }, + { + "name": "size", + "in": "query", + "schema": { + "type": "integer", + "format": "int32", + "default": 10 + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.ProjectCard" + } + } + }, + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.ProjectCard" + } + } + }, + "text/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.ProjectCard" + } + } + } + } + } + } + } + }, + "/api/v1/users/arealeads": { + "get": { + "tags": [ + "User" + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.UserSearchResults" + } + } + }, + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.UserSearchResults" + } + } + }, + "text/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.UserSearchResults" + } + } + } + } + } + } + } + }, + "/api/v1/users/{userId}/boundaries/civic": { + "get": { + "tags": [ + "User" + ], + "parameters": [ + { + "name": "userId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "option", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "name": "geographyId", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "name": "childType", + "in": "query", + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Enums.GeographyType" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.CivicGeographyLimited" + } + } + }, + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.CivicGeographyLimited" + } + } + }, + "text/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.CivicGeographyLimited" + } + } + } + } + } + } + } + }, + "/api/v1/users/{userId}/boundaries/civic/{option}": { + "get": { + "tags": [ + "User" + ], + "parameters": [ + { + "name": "userId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "option", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "geographyId", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "name": "childType", + "in": "query", + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Enums.GeographyType" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.CivicGeographyLimited" + } + } + }, + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.CivicGeographyLimited" + } + } + }, + "text/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.CivicGeographyLimited" + } + } + } + } + } + } + } + }, + "/api/v1/users/{userId}/boundaries/civic/{option}/{geographyId}/{childType}": { + "get": { + "tags": [ + "User" + ], + "parameters": [ + { + "name": "userId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "option", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "geographyId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "childType", + "in": "path", + "required": true, + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Enums.GeographyType" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.CivicGeographyLimited" + } + } + }, + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.CivicGeographyLimited" + } + } + }, + "text/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.CivicGeographyLimited" + } + } + } + } + } + } + } + }, + "/api/v1/users/{userId}/boundaries/church/{option}": { + "get": { + "tags": [ + "User" + ], + "parameters": [ + { + "name": "userId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "option", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "churchGeographyId", + "in": "query", + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "childType", + "in": "query", + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Enums.GeographyType" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.LDSGeographyLimited" + } + } + }, + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.LDSGeographyLimited" + } + } + }, + "text/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.LDSGeographyLimited" + } + } + } + } + } + } + } + }, + "/api/v1/users/{userId}/boundaries/church": { + "get": { + "tags": [ + "User" + ], + "parameters": [ + { + "name": "userId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "option", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "name": "churchGeographyId", + "in": "query", + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "childType", + "in": "query", + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Enums.GeographyType" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.LDSGeographyLimited" + } + } + }, + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.LDSGeographyLimited" + } + } + }, + "text/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.LDSGeographyLimited" + } + } + } + } + } + } + } + }, + "/api/v1/users/{userId}/boundaries/church/{option}/{churchGeographyId}/{childType}": { + "get": { + "tags": [ + "User" + ], + "parameters": [ + { + "name": "userId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "option", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "churchGeographyId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "childType", + "in": "path", + "required": true, + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Enums.GeographyType" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.LDSGeographyLimited" + } + } + }, + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.LDSGeographyLimited" + } + } + }, + "text/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.LDSGeographyLimited" + } + } + } + } + } + } + } + }, + "/api/v1/users/{userId}/bounded": { + "get": { + "tags": [ + "User" + ], + "parameters": [ + { + "name": "userId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "showLeads", + "in": "query", + "schema": { + "type": "boolean", + "default": true + } + }, + { + "name": "showFull", + "in": "query", + "schema": { + "type": "boolean", + "default": true + } + }, + { + "name": "levels", + "in": "query", + "schema": { + "type": "integer", + "format": "int32", + "default": 1 + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.UserResultBounded" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.UserResultBounded" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.UserResultBounded" + } + } + } + } + } + } + }, + "/api/v1/users/{userId}/claims": { + "get": { + "tags": [ + "User" + ], + "parameters": [ + { + "name": "userId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/json": { + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "text/json": { + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + } + } + }, + "/api/v1/users/zendeskToken": { + "get": { + "tags": [ + "User" + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/json": { + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "text/json": { + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + } + } + }, + "/api/v1/users/hash": { + "post": { + "tags": [ + "User" + ], + "requestBody": { + "content": { + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.DailyUserHashModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.DailyUserHashModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.DailyUserHashModel" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.DailyUserHashModel" + } + } + } + }, + "responses": { + "200": { + "description": "OK" + } + } + } + }, + "/api/v2/users/{userId}/draftProjects": { + "get": { + "tags": [ + "User" + ], + "parameters": [ + { + "name": "userId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "page", + "in": "query", + "schema": { + "type": "integer", + "format": "int32", + "default": 0 + } + }, + { + "name": "size", + "in": "query", + "schema": { + "type": "integer", + "format": "int32", + "default": 10 + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Pagination.PaginationResult`1[[JustServe.Contracts.Responses.ProjectCard, JustServe.Contracts, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Pagination.PaginationResult`1[[JustServe.Contracts.Responses.ProjectCard, JustServe.Contracts, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Pagination.PaginationResult`1[[JustServe.Contracts.Responses.ProjectCard, JustServe.Contracts, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]" + } + } + } + } + } + } + }, + "/api/v2/users/{userId}/draftProjects/{page}/{size}": { + "get": { + "tags": [ + "User" + ], + "parameters": [ + { + "name": "userId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "page", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32", + "default": 0 + } + }, + { + "name": "size", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32", + "default": 10 + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Pagination.PaginationResult`1[[JustServe.Contracts.Responses.ProjectCard, JustServe.Contracts, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Pagination.PaginationResult`1[[JustServe.Contracts.Responses.ProjectCard, JustServe.Contracts, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Pagination.PaginationResult`1[[JustServe.Contracts.Responses.ProjectCard, JustServe.Contracts, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]" + } + } + } + } + } + } + }, + "/api/v2/users/{userId}/recommendedProjects": { + "get": { + "tags": [ + "User" + ], + "parameters": [ + { + "name": "userId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "page", + "in": "query", + "schema": { + "type": "integer", + "format": "int32", + "default": 0 + } + }, + { + "name": "size", + "in": "query", + "schema": { + "type": "integer", + "format": "int32", + "default": 10 + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Pagination.PaginationResult`1[[JustServe.Contracts.Responses.ProjectCard, JustServe.Contracts, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Pagination.PaginationResult`1[[JustServe.Contracts.Responses.ProjectCard, JustServe.Contracts, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Pagination.PaginationResult`1[[JustServe.Contracts.Responses.ProjectCard, JustServe.Contracts, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]" + } + } + } + } + } + } + }, + "/api/v1/users/{userId}/favoriteOrganizations": { + "get": { + "tags": [ + "User" + ], + "parameters": [ + { + "name": "userId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.OrganizationResult" + } + } + }, + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.OrganizationResult" + } + } + }, + "text/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.OrganizationResult" + } + } + } + } + } + } + } + }, + "/api/v2/users/{userId}/favoriteProjects": { + "get": { + "tags": [ + "User" + ], + "parameters": [ + { + "name": "userId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "page", + "in": "query", + "schema": { + "type": "integer", + "format": "int32", + "default": 0 + } + }, + { + "name": "size", + "in": "query", + "schema": { + "type": "integer", + "format": "int32", + "default": 10 + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Pagination.PaginationResult`1[[JustServe.Contracts.Responses.ProjectCard, JustServe.Contracts, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Pagination.PaginationResult`1[[JustServe.Contracts.Responses.ProjectCard, JustServe.Contracts, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Pagination.PaginationResult`1[[JustServe.Contracts.Responses.ProjectCard, JustServe.Contracts, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]" + } + } + } + } + } + } + }, + "/api/v2/users/{userId}/favoriteProjects/{page}/{size}": { + "get": { + "tags": [ + "User" + ], + "parameters": [ + { + "name": "userId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "page", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32", + "default": 0 + } + }, + { + "name": "size", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32", + "default": 10 + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Pagination.PaginationResult`1[[JustServe.Contracts.Responses.ProjectCard, JustServe.Contracts, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Pagination.PaginationResult`1[[JustServe.Contracts.Responses.ProjectCard, JustServe.Contracts, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Pagination.PaginationResult`1[[JustServe.Contracts.Responses.ProjectCard, JustServe.Contracts, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]" + } + } + } + } + } + } + }, + "/api/v1/unsubscribe/contactpreferences/{token}": { + "get": { + "tags": [ + "User" + ], + "parameters": [ + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ActionResult`1[[JustServe.Entities.UserNotificationPreference, JustServe.Entities, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ActionResult`1[[JustServe.Entities.UserNotificationPreference, JustServe.Entities, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ActionResult`1[[JustServe.Entities.UserNotificationPreference, JustServe.Entities, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]" + } + } + } + } + } + } + }, + "/api/v2/users/{userId}/pastProjects": { + "get": { + "tags": [ + "User" + ], + "parameters": [ + { + "name": "userId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "page", + "in": "query", + "schema": { + "type": "integer", + "format": "int32", + "default": 0 + } + }, + { + "name": "size", + "in": "query", + "schema": { + "type": "integer", + "format": "int32", + "default": 10 + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Pagination.PaginationResult`1[[JustServe.Contracts.Responses.ProjectCard, JustServe.Contracts, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Pagination.PaginationResult`1[[JustServe.Contracts.Responses.ProjectCard, JustServe.Contracts, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Pagination.PaginationResult`1[[JustServe.Contracts.Responses.ProjectCard, JustServe.Contracts, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]" + } + } + } + } + } + } + }, + "/api/v2/users/{userId}/pastProjects/{page}/{size}": { + "get": { + "tags": [ + "User" + ], + "parameters": [ + { + "name": "userId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "page", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32", + "default": 0 + } + }, + { + "name": "size", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32", + "default": 10 + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Pagination.PaginationResult`1[[JustServe.Contracts.Responses.ProjectCard, JustServe.Contracts, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Pagination.PaginationResult`1[[JustServe.Contracts.Responses.ProjectCard, JustServe.Contracts, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Pagination.PaginationResult`1[[JustServe.Contracts.Responses.ProjectCard, JustServe.Contracts, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]" + } + } + } + } + } + } + }, + "/api/v1/users/{userId}/recordofservice/{year}": { + "get": { + "tags": [ + "User" + ], + "parameters": [ + { + "name": "userId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "year", + "in": "query", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Projects.RecordOfService" + } + } + }, + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Projects.RecordOfService" + } + } + }, + "text/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Projects.RecordOfService" + } + } + } + } + } + } + } + }, + "/api/v1/users/{userId}/limited": { + "get": { + "tags": [ + "User" + ], + "parameters": [ + { + "name": "userId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.UserResultLimited" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.UserResultLimited" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.UserResultLimited" + } + } + } + } + } + } + }, + "/api/v1/users/{userId}/name": { + "get": { + "tags": [ + "User" + ], + "parameters": [ + { + "name": "userId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.Name" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.Name" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.Name" + } + } + } + } + } + } + }, + "/api/v1/users/{userId}/volunteeredProjects": { + "get": { + "tags": [ + "User" + ], + "parameters": [ + { + "name": "userId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.ProjectPreview" + } + } + }, + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.ProjectPreview" + } + } + }, + "text/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.ProjectPreview" + } + } + } + } + } + } + } + }, + "/api/v1/users/recovery": { + "post": { + "tags": [ + "User" + ], + "requestBody": { + "content": { + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.RecoverAccountViewModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.RecoverAccountViewModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.RecoverAccountViewModel" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.RecoverAccountViewModel" + } + } + } + }, + "responses": { + "200": { + "description": "OK" + } + } + } + }, + "/api/v1/users": { + "post": { + "tags": [ + "User" + ], + "parameters": [ + { + "name": "FirstName", + "in": "query", + "required": true, + "schema": { + "maxLength": 50, + "minLength": 1, + "type": "string" + } + }, + { + "name": "LastName", + "in": "query", + "required": true, + "schema": { + "maxLength": 50, + "minLength": 1, + "type": "string" + } + }, + { + "name": "Email", + "in": "query", + "required": true, + "schema": { + "pattern": "^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,4}$", + "type": "string" + } + }, + { + "name": "Password", + "in": "query", + "required": true, + "schema": { + "maxLength": 100, + "minLength": 8, + "type": "string", + "format": "password" + } + }, + { + "name": "Postal", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "name": "City", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "name": "Language", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "name": "ClientId", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "name": "ClientSecret", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "name": "Latitude", + "in": "query", + "schema": { + "type": "number", + "format": "double" + } + }, + { + "name": "Longitude", + "in": "query", + "schema": { + "type": "number", + "format": "double" + } + }, + { + "name": "Country", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "name": "CountryCode", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "name": "AppleToken", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "name": "AppleAuthCode", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "name": "GoogleToken", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "name": "FacebookToken", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "name": "UserName", + "in": "query", + "schema": { + "type": "string", + "deprecated": true + } + }, + { + "name": "CountryCodeAlpha3", + "in": "query", + "schema": { + "type": "string", + "deprecated": true + } + }, + { + "name": "State", + "in": "query", + "schema": { + "type": "string", + "deprecated": true + } + }, + { + "name": "Address", + "in": "query", + "schema": { + "type": "string", + "deprecated": true + } + }, + { + "name": "DistanceUnits", + "in": "query", + "schema": { + "type": "string", + "deprecated": true + } + }, + { + "name": "Clock", + "in": "query", + "schema": { + "type": "string", + "deprecated": true + } + }, + { + "name": "Skills", + "in": "query", + "schema": { + "type": "array", + "items": { + "type": "string" + }, + "deprecated": true + } + }, + { + "name": "Interests", + "in": "query", + "schema": { + "type": "array", + "items": { + "type": "string" + }, + "deprecated": true + } + }, + { + "name": "Tools", + "in": "query", + "schema": { + "type": "array", + "items": { + "type": "string" + }, + "deprecated": true + } + }, + { + "name": "DaysAvailable", + "in": "query", + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/System.DayOfWeek" + }, + "deprecated": true + } + }, + { + "name": "TimesAvailable", + "in": "query", + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Enums.TimeOfDay" + }, + "deprecated": true + } + }, + { + "name": "DisasterReliefRegistrationSeen", + "in": "query", + "schema": { + "type": "boolean", + "deprecated": true + } + }, + { + "name": "DonateToDisasterReliefChecked", + "in": "query", + "schema": { + "type": "boolean", + "deprecated": true + } + }, + { + "name": "VolunteerForDisasterReliefChecked", + "in": "query", + "schema": { + "type": "boolean", + "deprecated": true + } + }, + { + "name": "DisasterReliefAvailabilityDate", + "in": "query", + "schema": { + "type": "string", + "format": "date-time", + "deprecated": true + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "type": "string" + } + }, + "application/json": { + "schema": { + "type": "string" + } + }, + "text/json": { + "schema": { + "type": "string" + } + } + } + } + } + } + }, + "/api/v1/users/activation/resend": { + "post": { + "tags": [ + "User" + ], + "requestBody": { + "content": { + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.ResendActivationEmail" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.ResendActivationEmail" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.ResendActivationEmail" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.ResendActivationEmail" + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "type": "string" + } + }, + "application/json": { + "schema": { + "type": "string" + } + }, + "text/json": { + "schema": { + "type": "string" + } + } + } + } + } + } + }, + "/api/v1/users/recovery/{token}": { + "post": { + "tags": [ + "User" + ], + "parameters": [ + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.ResetPasswordViewModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.ResetPasswordViewModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.ResetPasswordViewModel" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.ResetPasswordViewModel" + } + } + } + }, + "responses": { + "200": { + "description": "OK" + } + } + } + }, + "/api/v1/users/search/admins/reps": { + "post": { + "tags": [ + "User" + ], + "requestBody": { + "content": { + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.SearchUsersViewModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.SearchUsersViewModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.SearchUsersViewModel" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.SearchUsersViewModel" + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.UserSearchResults" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.UserSearchResults" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.UserSearchResults" + } + } + } + } + } + } + }, + "/api/v1/users/search/admins": { + "post": { + "tags": [ + "User" + ], + "requestBody": { + "content": { + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.SearchUsersViewModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.SearchUsersViewModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.SearchUsersViewModel" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.SearchUsersViewModel" + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.UserSearchResults" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.UserSearchResults" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.UserSearchResults" + } + } + } + } + } + } + }, + "/api/v1/users/search": { + "post": { + "tags": [ + "User" + ], + "requestBody": { + "content": { + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.SearchUsersViewModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.SearchUsersViewModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.SearchUsersViewModel" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.SearchUsersViewModel" + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.UserSearchResults" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.UserSearchResults" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.UserSearchResults" + } + } + } + } + } + } + }, + "/api/v1/users/search/limited": { + "post": { + "tags": [ + "User" + ], + "requestBody": { + "content": { + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.SearchUsersViewModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.SearchUsersViewModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.SearchUsersViewModel" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.SearchUsersViewModel" + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.UserSearchResults" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.UserSearchResults" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.UserSearchResults" + } + } + } + } + } + } + }, + "/api/v1/users/slimSearch": { + "post": { + "tags": [ + "User" + ], + "requestBody": { + "content": { + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.SearchUsersViewModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.SearchUsersViewModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.SearchUsersViewModel" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.SearchUsersViewModel" + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.UserSlimSearchResults" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.UserSlimSearchResults" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.UserSlimSearchResults" + } + } + } + } + } + } + }, + "/api/v1/users/signout": { + "get": { + "tags": [ + "User" + ], + "responses": { + "200": { + "description": "OK" + } + } + } + }, + "/api/v1/users/{id}/unlock": { + "get": { + "tags": [ + "User" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "type": "string" + } + }, + "application/json": { + "schema": { + "type": "string" + } + }, + "text/json": { + "schema": { + "type": "string" + } + } + } + } + } + } + }, + "/api/v1/unsubscribe/{token}": { + "get": { + "tags": [ + "User" + ], + "parameters": [ + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "generalMarketingOptIn", + "in": "query", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "volunteerNewsletter", + "in": "query", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "disasterRecovery", + "in": "query", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "responses": { + "200": { + "description": "OK" + } + } + } + }, + "/api/v1/users/{userId}/keywords": { + "put": { + "tags": [ + "User" + ], + "parameters": [ + { + "name": "userId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json-patch+json": { + "schema": { + "type": "string" + } + }, + "application/json": { + "schema": { + "type": "string" + } + }, + "text/json": { + "schema": { + "type": "string" + } + }, + "application/*+json": { + "schema": { + "type": "string" + } + } + } + }, + "responses": { + "200": { + "description": "OK" + } + } + } + }, + "/api/v1/users/{userId}/location": { + "put": { + "tags": [ + "User" + ], + "parameters": [ + { + "name": "City", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "name": "Postal", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "name": "CountryCode", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "name": "userId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK" + } + } + } + }, + "/api/v1/users/{id}/whatsnew": { + "put": { + "tags": [ + "User" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "type": "string" + } + }, + "application/json": { + "schema": { + "type": "string" + } + }, + "text/json": { + "schema": { + "type": "string" + } + } + } + } + } + } + }, + "/api/v1/users/{userId}/boundaries/check": { + "get": { + "tags": [ + "User" + ], + "parameters": [ + { + "name": "userId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.UserLocationCheckResponse" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.UserLocationCheckResponse" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.UserLocationCheckResponse" + } + } + } + } + } + } + }, + "/api/v1/users/{userId}/assignments/check": { + "get": { + "tags": [ + "User" + ], + "parameters": [ + { + "name": "userId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.UserLocationCheckResponse" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.UserLocationCheckResponse" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.UserLocationCheckResponse" + } + } + } + } + } + } + }, + "/api/v1/users/{userId}/adminInfo": { + "get": { + "tags": [ + "User" + ], + "parameters": [ + { + "name": "userId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.AdminLiteInfo" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.AdminLiteInfo" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.AdminLiteInfo" + } + } + } + } + } + } + }, + "/api/v1/users/{userId}/adminPendingProjects": { + "post": { + "tags": [ + "User" + ], + "parameters": [ + { + "name": "userId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "content": { + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.AdminPendingProjectsSearchRequest" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.AdminPendingProjectsSearchRequest" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.AdminPendingProjectsSearchRequest" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.AdminPendingProjectsSearchRequest" + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Pagination.PaginationResult`1[[System.Collections.Generic.IEnumerable`1[[JustServe.Contracts.Responses.UserPendingProject, JustServe.Contracts, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]]" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Pagination.PaginationResult`1[[System.Collections.Generic.IEnumerable`1[[JustServe.Contracts.Responses.UserPendingProject, JustServe.Contracts, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]]" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Pagination.PaginationResult`1[[System.Collections.Generic.IEnumerable`1[[JustServe.Contracts.Responses.UserPendingProject, JustServe.Contracts, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]]" + } + } + } + } + } + } + }, + "/api/v1/users/{userId}/adminPendingProjectCounts": { + "get": { + "tags": [ + "User" + ], + "parameters": [ + { + "name": "userId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.AdminPendingProjectCounts" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.AdminPendingProjectCounts" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.AdminPendingProjectCounts" + } + } + } + } + } + } + }, + "/api/v1/users/quickSearch": { + "post": { + "tags": [ + "User" + ], + "requestBody": { + "content": { + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.QuickSearchCreateRequest" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.QuickSearchCreateRequest" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.QuickSearchCreateRequest" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.QuickSearchCreateRequest" + } + } + } + }, + "responses": { + "200": { + "description": "OK" + } + } + } + }, + "/api/v1/users/quickSearch/searchType/{searchType}": { + "get": { + "tags": [ + "User" + ], + "parameters": [ + { + "name": "searchType", + "in": "path", + "required": true, + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Enums.QuickSearchType" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.QuickSearchTitle" + } + } + }, + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.QuickSearchTitle" + } + } + }, + "text/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.QuickSearchTitle" + } + } + } + } + } + } + } + }, + "/api/v1/users/quickSearch/{quickSearchId}/searchParameter": { + "get": { + "tags": [ + "User" + ], + "parameters": [ + { + "name": "quickSearchId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "type": "string" + } + }, + "application/json": { + "schema": { + "type": "string" + } + }, + "text/json": { + "schema": { + "type": "string" + } + } + } + } + } + } + }, + "/api/v1/users/quickSearch/{quickSearchId}": { + "delete": { + "tags": [ + "User" + ], + "parameters": [ + { + "name": "quickSearchId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "type": "string" + } + }, + "application/json": { + "schema": { + "type": "string" + } + }, + "text/json": { + "schema": { + "type": "string" + } + } + } + } + } + } + }, + "/api/v1/users/securitycontext/bearer": { + "get": { + "tags": [ + "User" + ], + "parameters": [ + { + "name": "userId", + "in": "query", + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Authentication.SecurityContext" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Authentication.SecurityContext" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Authentication.SecurityContext" + } + } + } + } + } + } + }, + "/api/v1/users/securitycontext/bearer/{userId}": { + "get": { + "tags": [ + "User" + ], + "parameters": [ + { + "name": "userId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Authentication.SecurityContext" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Authentication.SecurityContext" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Authentication.SecurityContext" + } + } + } + } + } + } + }, + "/api/v1/users/securitycontext/optional": { + "get": { + "tags": [ + "User" + ], + "parameters": [ + { + "name": "userId", + "in": "query", + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Authentication.SecurityContext" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Authentication.SecurityContext" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Authentication.SecurityContext" + } + } + } + } + } + } + }, + "/api/v1/users/securitycontext/optional/{userId}": { + "get": { + "tags": [ + "User" + ], + "parameters": [ + { + "name": "userId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Authentication.SecurityContext" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Authentication.SecurityContext" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Authentication.SecurityContext" + } + } + } + } + } + } + }, + "/api/v1/users/{userId}/churchGeographyAdminLabelEnums/{churchGeographyAdminLabelEnumId}": { + "post": { + "tags": [ + "User" + ], + "parameters": [ + { + "name": "userId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "churchGeographyAdminLabelEnumId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK" + } + } + }, + "delete": { + "tags": [ + "User" + ], + "parameters": [ + { + "name": "userId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "churchGeographyAdminLabelEnumId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK" + } + } + } + }, + "/api/v1/widget/user/{id}": { + "get": { + "tags": [ + "Widget" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Widget" + } + } + }, + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Widget" + } + } + }, + "text/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Widget" + } + } + } + } + } + } + } + }, + "/api/v1/widget/projects/search": { + "post": { + "tags": [ + "Widget" + ], + "requestBody": { + "content": { + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.WidgetProjectSearchModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.WidgetProjectSearchModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.WidgetProjectSearchModel" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.WidgetProjectSearchModel" + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.WidgetProjectResults" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.WidgetProjectResults" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.WidgetProjectResults" + } + } + } + } + } + } + }, + "/api/v1/widget/projects/all": { + "post": { + "tags": [ + "Widget" + ], + "requestBody": { + "content": { + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.WidgetRequestModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.WidgetRequestModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.WidgetRequestModel" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.WidgetRequestModel" + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Pagination.PaginationResult`1[[System.Collections.Generic.IEnumerable`1[[JustServe.Contracts.Responses.VolunteerMatchProject, JustServe.Contracts, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]]" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Pagination.PaginationResult`1[[System.Collections.Generic.IEnumerable`1[[JustServe.Contracts.Responses.VolunteerMatchProject, JustServe.Contracts, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]]" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Pagination.PaginationResult`1[[System.Collections.Generic.IEnumerable`1[[JustServe.Contracts.Responses.VolunteerMatchProject, JustServe.Contracts, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]]" + } + } + } + } + } + } + }, + "/api/v1/contact/projects/all": { + "post": { + "tags": [ + "Widget" + ], + "requestBody": { + "content": { + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.WidgetRequestModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.WidgetRequestModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.WidgetRequestModel" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.WidgetRequestModel" + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.MSDynamicsProjectResults" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.MSDynamicsProjectResults" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.MSDynamicsProjectResults" + } + } + } + } + } + } + }, + "/api/v1/contact/users/all": { + "post": { + "tags": [ + "Widget" + ], + "parameters": [ + { + "name": "NewsletterOnly", + "in": "query", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "requestBody": { + "content": { + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.WidgetRequestModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.WidgetRequestModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.WidgetRequestModel" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.WidgetRequestModel" + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.MSDynamicsUserResults" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.MSDynamicsUserResults" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.MSDynamicsUserResults" + } + } + } + } + } + } + }, + "/api/v1/contact/users/all/newsletterOnly/{NewsletterOnly}": { + "post": { + "tags": [ + "Widget" + ], + "parameters": [ + { + "name": "NewsletterOnly", + "in": "path", + "required": true, + "schema": { + "type": "boolean", + "default": false + } + } + ], + "requestBody": { + "content": { + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.WidgetRequestModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.WidgetRequestModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.WidgetRequestModel" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.WidgetRequestModel" + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.MSDynamicsUserResults" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.MSDynamicsUserResults" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.MSDynamicsUserResults" + } + } + } + } + } + } + }, + "/api/v1/contact/dynamics": { + "post": { + "tags": [ + "Widget" + ], + "requestBody": { + "content": { + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.WidgetRequestModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.WidgetRequestModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.WidgetRequestModel" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.WidgetRequestModel" + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Users.DynamicsNewsletterInfoAllUsers" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Users.DynamicsNewsletterInfoAllUsers" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Users.DynamicsNewsletterInfoAllUsers" + } + } + } + } + } + } + }, + "/api/v1/contact/dynamics/metadata": { + "post": { + "tags": [ + "Widget" + ], + "requestBody": { + "content": { + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.WidgetRequestModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.WidgetRequestModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.WidgetRequestModel" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.WidgetRequestModel" + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Users.DynamicsNewsletterInfoMetadata" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Users.DynamicsNewsletterInfoMetadata" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/JustServe.Contracts.Users.DynamicsNewsletterInfoMetadata" + } + } + } + } + } + } + }, + "/api/v1/contact/projectFilterTranslations": { + "get": { + "tags": [ + "Widget" + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.ProjectFiltersTranslation" + } + } + }, + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.ProjectFiltersTranslation" + } + } + }, + "text/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.ProjectFiltersTranslation" + } + } + } + } + } + } + } + } + }, + "components": { + "schemas": { + "JustServe.API.Controllers.CorusController+CorusPage": { + "enum": [ + "HelpCenter", + "Training", + "Articles" + ], + "type": "integer", + "format": "int32" + }, + "JustServe.Contracts.Authentication.BoundaryAdminBounded": { + "type": "object", + "properties": { + "id": { + "type": "string", + "nullable": true + }, + "firstName": { + "type": "string", + "nullable": true + }, + "lastName": { + "type": "string", + "nullable": true + }, + "type": { + "$ref": "#/components/schemas/JustServe.Contracts.Enums.Role" + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Authentication.BoundaryPermissionBounded": { + "type": "object", + "properties": { + "id": { + "type": "string", + "nullable": true + }, + "boundary": { + "type": "string", + "nullable": true + }, + "admins": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Authentication.BoundaryAdminBounded" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Authentication.ChurchCivicGeographyUserRole": { + "type": "object", + "properties": { + "churchGeographyId": { + "type": "string", + "format": "uuid" + }, + "unitId": { + "type": "string", + "nullable": true + }, + "role": { + "$ref": "#/components/schemas/JustServe.Contracts.Enums.Role" + }, + "civicGeographyId": { + "type": "string", + "format": "uuid" + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Authentication.ChurchGeographyUserRole": { + "type": "object", + "properties": { + "churchGeographyId": { + "type": "string", + "format": "uuid" + }, + "unitId": { + "type": "string", + "nullable": true + }, + "role": { + "$ref": "#/components/schemas/JustServe.Contracts.Enums.Role" + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Authentication.CivicGeoBounded": { + "type": "object", + "properties": { + "civicGeographyId": { + "type": "string", + "nullable": true + }, + "civicGeographyName": { + "type": "string", + "nullable": true + }, + "civicGeographyType": { + "$ref": "#/components/schemas/JustServe.Contracts.Enums.GeographyType" + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Authentication.OrganizationCivicGeographyUserRole": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "format": "uuid" + }, + "role": { + "$ref": "#/components/schemas/JustServe.Contracts.Enums.Role" + }, + "civicGeographyId": { + "type": "string", + "format": "uuid" + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Authentication.OrganizationUserRole": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "format": "uuid" + }, + "role": { + "$ref": "#/components/schemas/JustServe.Contracts.Enums.Role" + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Authentication.SecurityContext": { + "type": "object", + "properties": { + "userId": { + "type": "string", + "format": "uuid" + }, + "userRepresentativeForOrganizations": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "nullable": true + }, + "churchGeographies": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/JustServe.Contracts.Authentication.ChurchGeographyUserRole" + }, + "nullable": true + }, + "civicGeographies": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/JustServe.Contracts.Authentication.ChurchCivicGeographyUserRole" + }, + "nullable": true + }, + "organizationRoles": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/JustServe.Contracts.Authentication.OrganizationUserRole" + }, + "nullable": true + }, + "organizationCivicGeographyUserRoles": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Authentication.OrganizationCivicGeographyUserRole" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Authentication.Token": { + "type": "object", + "properties": { + "accessToken": { + "type": "string", + "nullable": true + }, + "tokenType": { + "type": "string", + "nullable": true + }, + "refreshToken": { + "type": "string", + "nullable": true + }, + "clientId": { + "type": "string", + "nullable": true + }, + "expiresIn": { + "type": "integer", + "format": "int32" + }, + "issued": { + "type": "string", + "format": "date-time" + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Corus.Article": { + "type": "object", + "properties": { + "id": { + "type": "string", + "nullable": true + }, + "title": { + "type": "string", + "nullable": true + }, + "introduction": { + "type": "string", + "nullable": true + }, + "body": { + "type": "string", + "nullable": true + }, + "permalink": { + "type": "string", + "nullable": true + }, + "media": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Corus.Media" + }, + "nullable": true + }, + "createdDate": { + "type": "string", + "format": "date-time" + }, + "createdByUser": { + "type": "string", + "nullable": true + }, + "modifiedDate": { + "type": "string", + "format": "date-time" + }, + "modifiedByUser": { + "type": "string", + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Corus.ArticleChapter": { + "type": "object", + "properties": { + "id": { + "type": "string", + "nullable": true + }, + "title": { + "type": "string", + "nullable": true + }, + "body": { + "type": "string", + "nullable": true + }, + "createdDate": { + "type": "string", + "format": "date-time" + }, + "createdByUser": { + "type": "string", + "nullable": true + }, + "modifiedDate": { + "type": "string", + "format": "date-time" + }, + "modifiedByUser": { + "type": "string", + "nullable": true + }, + "pages": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Corus.ArticlePage" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Corus.ArticlePage": { + "type": "object", + "properties": { + "id": { + "type": "string", + "nullable": true + }, + "pageType": { + "type": "string", + "nullable": true + }, + "title": { + "type": "string", + "nullable": true + }, + "body": { + "type": "string", + "nullable": true + }, + "permalink": { + "type": "string", + "nullable": true + }, + "media": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Corus.Media" + }, + "nullable": true + }, + "createdDate": { + "type": "string", + "format": "date-time" + }, + "createdByUser": { + "type": "string", + "nullable": true + }, + "modifiedDate": { + "type": "string", + "format": "date-time" + }, + "modifiedByUser": { + "type": "string", + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Corus.ArticlesDataSet": { + "type": "object", + "properties": { + "article": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Corus.Article" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Corus.ChaptersDataSet": { + "type": "object", + "properties": { + "articleChapters": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Corus.ArticleChapter" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Corus.Media": { + "type": "object", + "properties": { + "id": { + "type": "string", + "nullable": true + }, + "title": { + "type": "string", + "nullable": true + }, + "description": { + "type": "string", + "nullable": true + }, + "filename": { + "type": "string", + "nullable": true + }, + "type": { + "type": "string", + "nullable": true + }, + "placementType": { + "type": "string", + "nullable": true + }, + "size": { + "type": "string", + "nullable": true + }, + "options": { + "type": "string", + "nullable": true + }, + "altCaption": { + "type": "string", + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Corus.PagesDataSet": { + "type": "object", + "properties": { + "pages": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Corus.ArticlePage" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Enums.AdminProjectSearchFilter": { + "enum": [ + "None", + "All", + "Location", + "Administrator", + "Keyword", + "Label", + "Email", + "Organization", + "Contact" + ], + "type": "integer", + "format": "int32" + }, + "JustServe.Contracts.Enums.AdminSearchOrderBy": { + "enum": [ + "None", + "Relativity", + "Recent", + "Title", + "OwnerName", + "CityState", + "Created" + ], + "type": "integer", + "format": "int32" + }, + "JustServe.Contracts.Enums.AdminSubordinateFilterModifier": { + "enum": [ + "AdminOnly", + "SubordinatesOnly", + "Both" + ], + "type": "integer", + "format": "int32" + }, + "JustServe.Contracts.Enums.AttachmentType": { + "enum": [ + "Other", + "Image", + "Thumbnail", + "MainImage", + "Banner", + "Document", + "Pdf", + "Spreadsheet", + "Presentation" + ], + "type": "integer", + "format": "int32" + }, + "JustServe.Contracts.Enums.BoundaryType": { + "enum": [ + "LdsGeography", + "Organization" + ], + "type": "integer", + "format": "int32" + }, + "JustServe.Contracts.Enums.DefaultSection": { + "enum": [ + "Organizations", + "Projects", + "Questions", + "AboutUs", + "Give" + ], + "type": "integer", + "format": "int32" + }, + "JustServe.Contracts.Enums.DistanceType": { + "enum": [ + "None", + "Miles", + "Kilometers" + ], + "type": "integer", + "format": "int32" + }, + "JustServe.Contracts.Enums.DynamicRouteType": { + "enum": [ + "Organization", + "DisasterRelief" + ], + "type": "integer", + "format": "int32" + }, + "JustServe.Contracts.Enums.EndorsementStatus": { + "enum": [ + "Approved", + "RequestedByOrg", + "RequestedByVolunteerCenter", + "Rejected", + "Deleted" + ], + "type": "integer", + "format": "int32" + }, + "JustServe.Contracts.Enums.GeographyType": { + "enum": [ + "All", + "Area", + "Mission", + "CC", + "Stake", + "Country", + "State", + "County", + "City", + "Zipcode", + "Neighborhood", + "National", + "None" + ], + "type": "integer", + "format": "int32" + }, + "JustServe.Contracts.Enums.Lang": { + "enum": [ + "None", + "EN", + "GB", + "ES", + "FR", + "PT", + "HU", + "DE" + ], + "type": "integer", + "format": "int32" + }, + "JustServe.Contracts.Enums.NotificationLevel": { + "enum": [ + "None", + "Action", + "Information" + ], + "type": "integer", + "format": "int32" + }, + "JustServe.Contracts.Enums.NotificationStatus": { + "enum": [ + "Unseen", + "Seen" + ], + "type": "integer", + "format": "int32" + }, + "JustServe.Contracts.Enums.NotificationType": { + "enum": [ + "ProjectApprovalNotification", + "ProjectExpirationNotification", + "ProjectEscalatedNotification", + "ProjectEscalatedToAnotherUserNotification", + "ChurchAdminChangedNotification", + "OrganizationAdminAddedNotification", + "Unused2", + "ProjectChangedNotification", + "ProjectFinishedSuccessStoryNotification", + "ProjectUpcomingNotification", + "Unused3", + "ProjectOccurredNotification", + "NewNearbyProjectNotification", + "Unused4", + "NewFavoritedProjectNotification", + "NewSuccessStoryNotification", + "Unused5", + "AccountUpdatedNotification", + "Unused6", + "ProfileCompletionNotification", + "AnnouncementCustomNotification", + "WhatsNewCustomNotification", + "DisasterRecoveryCustomNotificaiton", + "BannerCustomNotification", + "Unknown" + ], + "type": "integer", + "format": "int32" + }, + "JustServe.Contracts.Enums.OrganizationStatus": { + "enum": [ + "None", + "Active", + "Pending", + "Inactive" + ], + "type": "integer", + "format": "int32" + }, + "JustServe.Contracts.Enums.OrganizationType": { + "enum": [ + "None", + "Organization", + "VolunteerCenter", + "DisasterRelief", + "NonProfit", + "GovCity", + "GovCounty", + "GovState", + "GovNational", + "Corporation", + "ClubAffiliated", + "ClubJustServe", + "Religious", + "Service", + "Disaster", + "CampaignNational", + "CampaignGlobal" + ], + "type": "integer", + "format": "int32" + }, + "JustServe.Contracts.Enums.OwnerType": { + "enum": [ + "User", + "Organization" + ], + "type": "integer", + "format": "int32" + }, + "JustServe.Contracts.Enums.PrivacyTermsType": { + "enum": [ + "None", + "PrivacyPolicy", + "TermsOfUse" + ], + "type": "integer", + "format": "int32" + }, + "JustServe.Contracts.Enums.ProjectEventStatus": { + "enum": [ + "Active", + "OnHold", + "Cancelled" + ], + "type": "integer", + "format": "int32" + }, + "JustServe.Contracts.Enums.ProjectLocationType": { + "enum": [ + "None", + "SingleLocation", + "Regional", + "Remote" + ], + "type": "integer", + "format": "int32" + }, + "JustServe.Contracts.Enums.ProjectSearchOrderBy": { + "enum": [ + "None", + "Relativity", + "Recent", + "Title", + "TitleReverse", + "Created", + "NextOpportunity", + "Distance" + ], + "type": "integer", + "format": "int32" + }, + "JustServe.Contracts.Enums.ProjectSignupType": { + "enum": [ + "JustServeSignUp", + "Redirect" + ], + "type": "integer", + "format": "int32" + }, + "JustServe.Contracts.Enums.ProjectStatus": { + "enum": [ + "None", + "Published", + "Submitted", + "Draft", + "Template", + "OnHold", + "Cancelled", + "Declined" + ], + "type": "integer", + "format": "int32" + }, + "JustServe.Contracts.Enums.ProjectTimeType": { + "enum": [ + "SingleDay", + "MultipleDays", + "Recurring", + "Ongoing" + ], + "type": "integer", + "format": "int32" + }, + "JustServe.Contracts.Enums.ProjectType": { + "enum": [ + "None", + "DTL", + "Ongoing", + "Recurring", + "MultipleDTL" + ], + "type": "integer", + "format": "int32" + }, + "JustServe.Contracts.Enums.QuickSearchType": { + "enum": [ + "AdminProject", + "AdminUser" + ], + "type": "integer", + "format": "int32" + }, + "JustServe.Contracts.Enums.RecurringType": { + "enum": [ + "None", + "Weekly", + "Monthly", + "DayOfMonth" + ], + "type": "integer", + "format": "int32" + }, + "JustServe.Contracts.Enums.Role": { + "enum": [ + "none", + "city", + "county", + "state", + "country", + "orgAdmin", + "orgLeadAdmin", + "stakeAdmin", + "stakeLeadAdmin", + "ccAdmin", + "ccLeadAdmin", + "missionAdmin", + "missionLeadAdmin", + "nationalAdmin", + "nationalLeadAdmin", + "areaAdmin", + "areaLeadAdmin", + "globalAdmin", + "globalLeadAdmin", + "developer" + ], + "type": "integer", + "format": "int32" + }, + "JustServe.Contracts.Enums.SearchFilter": { + "enum": [ + "None", + "All", + "Location", + "Administrator", + "Keyword", + "Label", + "Email" + ], + "type": "integer", + "format": "int32" + }, + "JustServe.Contracts.Enums.SearchLocationType": { + "enum": [ + "Radius", + "State", + "Regional", + "None" + ], + "type": "integer", + "format": "int32" + }, + "JustServe.Contracts.Enums.SortByFilterModifier": { + "enum": [ + "Ascending", + "Descending" + ], + "type": "integer", + "format": "int32" + }, + "JustServe.Contracts.Enums.TimeOfDay": { + "enum": [ + "None", + "Morning", + "Afternoon", + "Evening" + ], + "type": "integer", + "format": "int32" + }, + "JustServe.Contracts.Geographies.ChurchGeoTranslation": { + "type": "object", + "properties": { + "churchGeoName": { + "type": "string", + "nullable": true + }, + "language": { + "type": "string", + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Geographies.ChurchGeographyAdminLabelEnum": { + "type": "object", + "properties": { + "adminLabelId": { + "type": "string", + "format": "uuid" + }, + "adminLabelName": { + "type": "string", + "nullable": true + }, + "adminLabelDescription": { + "type": "string", + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Geographies.CountryInfo": { + "type": "object", + "properties": { + "twoCharCode": { + "type": "string", + "nullable": true + }, + "threeCharCode": { + "type": "string", + "nullable": true + }, + "countryPhone": { + "type": "string", + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Geographies.CountryNameInfo": { + "type": "object", + "properties": { + "usePostal": { + "type": "boolean" + }, + "countryName": { + "type": "string", + "nullable": true + }, + "twoCharCode": { + "type": "string", + "nullable": true + }, + "threeCharCode": { + "type": "string", + "nullable": true + }, + "countryPhone": { + "type": "string", + "nullable": true + }, + "countryId": { + "type": "string", + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Geographies.GeographyBounded": { + "type": "object", + "properties": { + "id": { + "type": "string", + "nullable": true + }, + "name": { + "type": "string", + "nullable": true + }, + "type": { + "$ref": "#/components/schemas/JustServe.Contracts.Enums.GeographyType" + }, + "civicCountryId": { + "type": "string", + "nullable": true + }, + "civicStateId": { + "type": "string", + "nullable": true + }, + "civicCountyId": { + "type": "string", + "nullable": true + }, + "civicCityId": { + "type": "string", + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Geographies.LDSGeography": { + "type": "object", + "properties": { + "id": { + "type": "string", + "nullable": true + }, + "type": { + "$ref": "#/components/schemas/JustServe.Contracts.Enums.GeographyType" + }, + "boundaryUpdated": { + "type": "string", + "format": "date-time" + }, + "unitId": { + "type": "string", + "nullable": true + }, + "name": { + "type": "string", + "nullable": true + }, + "churchGeoTranslations": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Geographies.ChurchGeoTranslation" + }, + "nullable": true + }, + "areaId": { + "type": "string", + "nullable": true + }, + "missionId": { + "type": "string", + "nullable": true + }, + "ccId": { + "type": "string", + "nullable": true + }, + "stakeId": { + "type": "string", + "nullable": true + }, + "active": { + "type": "boolean" + }, + "country": { + "type": "string", + "nullable": true + }, + "latitude": { + "type": "number", + "format": "double" + }, + "longitude": { + "type": "number", + "format": "double" + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.ImagePairDetails": { + "type": "object", + "properties": { + "full": { + "type": "string", + "nullable": true + }, + "thumb": { + "type": "string", + "nullable": true + }, + "title": { + "type": "string", + "nullable": true + }, + "description": { + "type": "string", + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.LocaleNames": { + "type": "object", + "properties": { + "bcp47": { + "type": "string", + "nullable": true + }, + "name": { + "type": "string", + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Locations.Location": { + "type": "object", + "properties": { + "mapId": { + "type": "string", + "nullable": true + }, + "fullDisplayAddress": { + "type": "string", + "nullable": true + }, + "address": { + "type": "string", + "nullable": true + }, + "suite": { + "type": "string", + "nullable": true + }, + "city": { + "type": "string", + "nullable": true + }, + "civicCityId": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "neighborhood": { + "type": "string", + "nullable": true + }, + "county": { + "type": "string", + "nullable": true + }, + "state": { + "type": "string", + "nullable": true + }, + "postal": { + "type": "string", + "nullable": true + }, + "country": { + "type": "string", + "nullable": true + }, + "countryCode": { + "type": "string", + "nullable": true + }, + "missionId": { + "type": "string", + "nullable": true + }, + "ccId": { + "type": "string", + "nullable": true + }, + "stakeId": { + "type": "string", + "nullable": true + }, + "areaId": { + "type": "string", + "nullable": true + }, + "latitude": { + "type": "number", + "format": "double" + }, + "longitude": { + "type": "number", + "format": "double" + }, + "maxLatitude": { + "type": "number", + "format": "double" + }, + "minLatitude": { + "type": "number", + "format": "double" + }, + "maxLongitude": { + "type": "number", + "format": "double" + }, + "minLongitude": { + "type": "number", + "format": "double" + }, + "geoCodeOverride": { + "type": "boolean" + }, + "timezone": { + "type": "string", + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Locations.LocationRad": { + "type": "object", + "properties": { + "mapId": { + "type": "string", + "nullable": true + }, + "fullDisplayAddress": { + "type": "string", + "nullable": true + }, + "address": { + "type": "string", + "nullable": true + }, + "suite": { + "type": "string", + "nullable": true + }, + "city": { + "type": "string", + "nullable": true + }, + "civicCityId": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "neighborhood": { + "type": "string", + "nullable": true + }, + "county": { + "type": "string", + "nullable": true + }, + "state": { + "type": "string", + "nullable": true + }, + "postal": { + "type": "string", + "nullable": true + }, + "country": { + "type": "string", + "nullable": true + }, + "countryCode": { + "type": "string", + "nullable": true + }, + "missionId": { + "type": "string", + "nullable": true + }, + "ccId": { + "type": "string", + "nullable": true + }, + "stakeId": { + "type": "string", + "nullable": true + }, + "areaId": { + "type": "string", + "nullable": true + }, + "latitude": { + "type": "number", + "format": "double" + }, + "longitude": { + "type": "number", + "format": "double" + }, + "maxLatitude": { + "type": "number", + "format": "double" + }, + "minLatitude": { + "type": "number", + "format": "double" + }, + "maxLongitude": { + "type": "number", + "format": "double" + }, + "minLongitude": { + "type": "number", + "format": "double" + }, + "geoCodeOverride": { + "type": "boolean" + }, + "timezone": { + "type": "string", + "nullable": true + }, + "radiusType": { + "$ref": "#/components/schemas/JustServe.Contracts.Enums.DistanceType" + }, + "countryCode2Char": { + "type": "string", + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Logging.ProjectOwnerLog": { + "type": "object", + "properties": { + "projectId": { + "type": "string", + "format": "uuid" + }, + "ownerUserId": { + "type": "string", + "format": "uuid" + }, + "ownerUserFirstName": { + "type": "string", + "nullable": true + }, + "ownerUserLastName": { + "type": "string", + "nullable": true + }, + "updated": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "updatedBy": { + "type": "string", + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Logging.SearchLog": { + "type": "object", + "properties": { + "searchedOn": { + "type": "string", + "format": "date-time" + }, + "keywords": { + "type": "string", + "nullable": true + }, + "location": { + "type": "string", + "nullable": true + }, + "radius": { + "type": "integer", + "format": "int32" + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Logging.SignInLog": { + "type": "object", + "properties": { + "signedInOn": { + "type": "string", + "format": "date-time" + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Logging.UserHistory": { + "type": "object", + "properties": { + "id": { + "type": "string", + "nullable": true + }, + "userLocation": { + "$ref": "#/components/schemas/JustServe.Contracts.Locations.Location" + }, + "signInLogs": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Logging.SignInLog" + }, + "nullable": true + }, + "searchLogs": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Logging.SearchLog" + }, + "nullable": true + }, + "volunteerLogs": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Logging.VolunteerLog" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Logging.VolunteerLog": { + "type": "object", + "properties": { + "volunteeredOn": { + "type": "string", + "format": "date-time" + }, + "projectId": { + "type": "string", + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Notifications.CustomNotification": { + "type": "object", + "properties": { + "id": { + "type": "string", + "nullable": true + }, + "locationId": { + "type": "string", + "nullable": true + }, + "locationName": { + "type": "string", + "nullable": true + }, + "geography": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.GeographyLimited" + }, + "geographyType": { + "$ref": "#/components/schemas/JustServe.Contracts.Enums.GeographyType" + }, + "type": { + "$ref": "#/components/schemas/JustServe.Contracts.Enums.NotificationType" + }, + "level": { + "$ref": "#/components/schemas/JustServe.Contracts.Enums.NotificationLevel" + }, + "title": { + "type": "string", + "nullable": true + }, + "description": { + "type": "string", + "nullable": true + }, + "lang": { + "type": "string", + "nullable": true + }, + "redirectLink": { + "type": "string", + "nullable": true + }, + "startDate": { + "type": "string", + "format": "date-time" + }, + "endDate": { + "type": "string", + "format": "date-time" + }, + "isAdminOnly": { + "type": "boolean" + }, + "created": { + "type": "string", + "format": "date-time" + }, + "updated": { + "type": "string", + "format": "date-time" + }, + "createdBy": { + "type": "string", + "nullable": true + }, + "updatedBy": { + "type": "string", + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Notifications.CustomNotificationResult": { + "type": "object", + "properties": { + "id": { + "type": "string", + "nullable": true + }, + "locationId": { + "type": "string", + "nullable": true + }, + "locationName": { + "type": "string", + "nullable": true + }, + "geography": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.GeographyLimited" + }, + "geographyType": { + "$ref": "#/components/schemas/JustServe.Contracts.Enums.GeographyType" + }, + "type": { + "$ref": "#/components/schemas/JustServe.Contracts.Enums.NotificationType" + }, + "level": { + "$ref": "#/components/schemas/JustServe.Contracts.Enums.NotificationLevel" + }, + "title": { + "type": "string", + "nullable": true + }, + "description": { + "type": "string", + "nullable": true + }, + "lang": { + "type": "string", + "nullable": true + }, + "redirectLink": { + "type": "string", + "nullable": true + }, + "startDate": { + "type": "string", + "format": "date-time" + }, + "endDate": { + "type": "string", + "format": "date-time" + }, + "isAdminOnly": { + "type": "boolean" + }, + "created": { + "type": "string", + "format": "date-time" + }, + "updated": { + "type": "string", + "format": "date-time" + }, + "createdBy": { + "type": "string", + "nullable": true + }, + "updatedBy": { + "type": "string", + "nullable": true + }, + "userNotificationId": { + "type": "string", + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Notifications.Notification": { + "type": "object", + "properties": { + "notificationId": { + "type": "string", + "nullable": true + }, + "type": { + "$ref": "#/components/schemas/JustServe.Contracts.Enums.NotificationType" + }, + "level": { + "$ref": "#/components/schemas/JustServe.Contracts.Enums.NotificationLevel" + }, + "status": { + "$ref": "#/components/schemas/JustServe.Contracts.Enums.NotificationStatus" + }, + "createdDate": { + "type": "string", + "format": "date-time" + }, + "showDate": { + "type": "string", + "format": "date-time" + }, + "showEndDate": { + "type": "string", + "format": "date-time" + }, + "title": { + "type": "string", + "nullable": true + }, + "boundaryId": { + "type": "string", + "nullable": true + }, + "adminId": { + "type": "string", + "nullable": true + }, + "projectId": { + "type": "string", + "nullable": true + }, + "projectEventId": { + "type": "string", + "nullable": true + }, + "dtlId": { + "type": "string", + "nullable": true + }, + "timeSlotId": { + "type": "string", + "nullable": true + }, + "volunteeredRecurrenceId": { + "type": "string", + "nullable": true + }, + "successStoryId": { + "type": "string", + "nullable": true + }, + "organizationId": { + "type": "string", + "nullable": true + }, + "boundaryAdminUserId": { + "type": "string", + "nullable": true + }, + "customTitle": { + "type": "string", + "nullable": true + }, + "customDesc": { + "type": "string", + "nullable": true + }, + "customNotificationId": { + "type": "string", + "nullable": true + }, + "redirectLink": { + "type": "string", + "nullable": true + }, + "userId": { + "type": "string", + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Notifications.UserNotification": { + "type": "object", + "properties": { + "id": { + "type": "string", + "nullable": true + }, + "userId": { + "type": "string", + "nullable": true + }, + "notifications": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Notifications.Notification" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Organizations.Cause": { + "type": "object", + "properties": { + "id": { + "type": "string", + "nullable": true + }, + "imageName": { + "type": "string", + "nullable": true + }, + "name": { + "type": "string", + "nullable": true + }, + "description": { + "type": "string", + "nullable": true + }, + "projects": { + "type": "array", + "items": { + "type": "string" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Organizations.Endorsement": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "nullable": true + }, + "updated": { + "type": "string", + "format": "date-time" + }, + "endorsementStatus": { + "$ref": "#/components/schemas/JustServe.Contracts.Enums.EndorsementStatus" + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Organizations.OrgRepresentative": { + "type": "object", + "properties": { + "representativeUserId": { + "type": "string", + "format": "uuid" + }, + "created": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "createdBy": { + "type": "string", + "format": "uuid" + }, + "updated": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "updatedBy": { + "type": "string", + "format": "uuid", + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Organizations.Organization": { + "type": "object", + "properties": { + "id": { + "type": "string", + "nullable": true + }, + "language": { + "type": "string", + "nullable": true + }, + "organizationType": { + "$ref": "#/components/schemas/JustServe.Contracts.Enums.OrganizationType" + }, + "endorsements": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Organizations.Endorsement" + }, + "nullable": true + }, + "owners": { + "type": "array", + "items": { + "type": "string" + }, + "nullable": true + }, + "representatives": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Organizations.OrgRepresentative" + }, + "nullable": true + }, + "name": { + "type": "string", + "nullable": true + }, + "description": { + "type": "string", + "nullable": true + }, + "status": { + "$ref": "#/components/schemas/JustServe.Contracts.Enums.OrganizationStatus" + }, + "activationDate": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "firstStartTime": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "finalEndTime": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "website": { + "type": "string", + "nullable": true + }, + "autoRedirect": { + "type": "boolean" + }, + "url": { + "type": "string", + "nullable": true + }, + "internalURL": { + "type": "string", + "nullable": true + }, + "location": { + "$ref": "#/components/schemas/JustServe.Contracts.Locations.Location" + }, + "logo": { + "type": "string", + "nullable": true + }, + "banner": { + "type": "string", + "nullable": true + }, + "facebookPath": { + "type": "string", + "nullable": true + }, + "googlePath": { + "type": "string", + "nullable": true + }, + "twitterPath": { + "type": "string", + "nullable": true + }, + "youTubePath": { + "type": "string", + "nullable": true + }, + "instagramPath": { + "type": "string", + "nullable": true + }, + "linkedInPath": { + "type": "string", + "nullable": true + }, + "contactName": { + "type": "string", + "nullable": true + }, + "contactPhone": { + "type": "string", + "nullable": true + }, + "contactEmail": { + "type": "string", + "nullable": true + }, + "linkedProjects": { + "type": "array", + "items": { + "type": "string" + }, + "nullable": true + }, + "created": { + "type": "string", + "format": "date-time" + }, + "updated": { + "type": "string", + "format": "date-time" + }, + "createdBy": { + "type": "string", + "nullable": true + }, + "updatedBy": { + "type": "string", + "nullable": true + }, + "deleted": { + "type": "boolean" + }, + "deletedOn": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "deletedBy": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "aboutUs": { + "type": "string", + "nullable": true + }, + "volunteerCenterInfo": { + "$ref": "#/components/schemas/JustServe.Contracts.Organizations.VolunteerCenterInfo" + }, + "projectsData": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.ProjectSlim" + }, + "nullable": true + }, + "totalProjectCount": { + "type": "integer", + "format": "int32" + }, + "userCanEndorse": { + "type": "boolean" + }, + "relativityScore": { + "type": "number", + "format": "double" + }, + "volunteerCenterParents": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.OrganizationSlim" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Organizations.OrganizationBounded": { + "type": "object", + "properties": { + "id": { + "type": "string", + "nullable": true + }, + "endorsements": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Organizations.Endorsement" + }, + "nullable": true + }, + "name": { + "type": "string", + "nullable": true + }, + "url": { + "type": "string", + "nullable": true + }, + "location": { + "$ref": "#/components/schemas/JustServe.Contracts.Locations.Location" + }, + "status": { + "$ref": "#/components/schemas/JustServe.Contracts.Enums.OrganizationStatus" + }, + "isLead": { + "type": "boolean" + }, + "type": { + "$ref": "#/components/schemas/JustServe.Contracts.Enums.OrganizationType" + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Organizations.VolunteerCenterInfo": { + "type": "object", + "properties": { + "id": { + "type": "string", + "nullable": true + }, + "associatedProjects": { + "type": "array", + "items": { + "type": "string" + }, + "nullable": true + }, + "defaultSection": { + "$ref": "#/components/schemas/JustServe.Contracts.Enums.DefaultSection" + }, + "organizationsEnabled": { + "type": "boolean" + }, + "projectsEnabled": { + "type": "boolean" + }, + "questionsEnabled": { + "type": "boolean" + }, + "aboutUsEnabled": { + "type": "boolean" + }, + "giveEnabled": { + "type": "boolean" + }, + "about": { + "type": "string", + "nullable": true + }, + "endorsedOrganizationsData": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.OrganizationResult" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Pagination.PaginationProjectSearchResult`1[[System.Collections.Generic.IEnumerable`1[[JustServe.Contracts.Responses.ProjectCard, JustServe.Contracts, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]]": { + "type": "object", + "properties": { + "pageNumber": { + "type": "integer", + "format": "int32" + }, + "pageSize": { + "type": "integer", + "format": "int32" + }, + "items": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.ProjectCard" + }, + "nullable": true + }, + "pageCount": { + "type": "integer", + "format": "int32", + "nullable": true, + "readOnly": true + }, + "itemCount": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "searchLatitude": { + "type": "number", + "format": "double" + }, + "searchLongitude": { + "type": "number", + "format": "double" + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Pagination.PaginationResult`1[[JustServe.Contracts.Responses.ProjectCard, JustServe.Contracts, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]": { + "type": "object", + "properties": { + "pageNumber": { + "type": "integer", + "format": "int32" + }, + "pageSize": { + "type": "integer", + "format": "int32" + }, + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.ProjectCard" + }, + "pageCount": { + "type": "integer", + "format": "int32", + "nullable": true, + "readOnly": true + }, + "itemCount": { + "type": "integer", + "format": "int32", + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Pagination.PaginationResult`1[[System.Collections.Generic.IEnumerable`1[[JustServe.Contracts.Geographies.ChurchGeographyAdminLabelEnum, JustServe.Contracts, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]]": { + "type": "object", + "properties": { + "pageNumber": { + "type": "integer", + "format": "int32" + }, + "pageSize": { + "type": "integer", + "format": "int32" + }, + "items": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Geographies.ChurchGeographyAdminLabelEnum" + }, + "nullable": true + }, + "pageCount": { + "type": "integer", + "format": "int32", + "nullable": true, + "readOnly": true + }, + "itemCount": { + "type": "integer", + "format": "int32", + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Pagination.PaginationResult`1[[System.Collections.Generic.IEnumerable`1[[JustServe.Contracts.Responses.ProjectAdmin, JustServe.Contracts, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]]": { + "type": "object", + "properties": { + "pageNumber": { + "type": "integer", + "format": "int32" + }, + "pageSize": { + "type": "integer", + "format": "int32" + }, + "items": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.ProjectAdmin" + }, + "nullable": true + }, + "pageCount": { + "type": "integer", + "format": "int32", + "nullable": true, + "readOnly": true + }, + "itemCount": { + "type": "integer", + "format": "int32", + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Pagination.PaginationResult`1[[System.Collections.Generic.IEnumerable`1[[JustServe.Contracts.Responses.ProjectEventCustom, JustServe.Contracts, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]]": { + "type": "object", + "properties": { + "pageNumber": { + "type": "integer", + "format": "int32" + }, + "pageSize": { + "type": "integer", + "format": "int32" + }, + "items": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.ProjectEventCustom" + }, + "nullable": true + }, + "pageCount": { + "type": "integer", + "format": "int32", + "nullable": true, + "readOnly": true + }, + "itemCount": { + "type": "integer", + "format": "int32", + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Pagination.PaginationResult`1[[System.Collections.Generic.IEnumerable`1[[JustServe.Contracts.Responses.UserPendingProject, JustServe.Contracts, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]]": { + "type": "object", + "properties": { + "pageNumber": { + "type": "integer", + "format": "int32" + }, + "pageSize": { + "type": "integer", + "format": "int32" + }, + "items": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.UserPendingProject" + }, + "nullable": true + }, + "pageCount": { + "type": "integer", + "format": "int32", + "nullable": true, + "readOnly": true + }, + "itemCount": { + "type": "integer", + "format": "int32", + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Pagination.PaginationResult`1[[System.Collections.Generic.IEnumerable`1[[JustServe.Contracts.Responses.VolunteerLiteDetails, JustServe.Contracts, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]]": { + "type": "object", + "properties": { + "pageNumber": { + "type": "integer", + "format": "int32" + }, + "pageSize": { + "type": "integer", + "format": "int32" + }, + "items": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.VolunteerLiteDetails" + }, + "nullable": true + }, + "pageCount": { + "type": "integer", + "format": "int32", + "nullable": true, + "readOnly": true + }, + "itemCount": { + "type": "integer", + "format": "int32", + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Pagination.PaginationResult`1[[System.Collections.Generic.IEnumerable`1[[JustServe.Contracts.Responses.VolunteerMatchProject, JustServe.Contracts, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]]": { + "type": "object", + "properties": { + "pageNumber": { + "type": "integer", + "format": "int32" + }, + "pageSize": { + "type": "integer", + "format": "int32" + }, + "items": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.VolunteerMatchProject" + }, + "nullable": true + }, + "pageCount": { + "type": "integer", + "format": "int32", + "nullable": true, + "readOnly": true + }, + "itemCount": { + "type": "integer", + "format": "int32", + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.PrivacyTerms": { + "type": "object", + "properties": { + "id": { + "type": "string", + "nullable": true + }, + "type": { + "$ref": "#/components/schemas/JustServe.Contracts.Enums.PrivacyTermsType" + }, + "language": { + "type": "string", + "nullable": true + }, + "country": { + "type": "string", + "nullable": true + }, + "title": { + "type": "string", + "nullable": true + }, + "html": { + "type": "string", + "nullable": true + }, + "updated": { + "type": "string", + "format": "date-time" + }, + "publishedDate": { + "type": "string", + "format": "date-time" + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Projects.AdminInfo": { + "type": "object", + "properties": { + "userId": { + "type": "string", + "nullable": true + }, + "firstName": { + "type": "string", + "nullable": true + }, + "lastName": { + "type": "string", + "nullable": true + }, + "email": { + "type": "string", + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Projects.Applicant": { + "type": "object", + "properties": { + "submitterUserId": { + "type": "string", + "nullable": true + }, + "firstName": { + "type": "string", + "nullable": true + }, + "lastName": { + "type": "string", + "nullable": true + }, + "email": { + "type": "string", + "nullable": true + }, + "phone": { + "type": "string", + "nullable": true + }, + "postal": { + "type": "string", + "nullable": true + }, + "applicantPostal": { + "type": "string", + "nullable": true + }, + "applicantCity": { + "type": "string", + "nullable": true + }, + "applicantCountry": { + "type": "string", + "nullable": true + }, + "applicantCountryCode": { + "type": "string", + "nullable": true + }, + "assignmentLevel": { + "$ref": "#/components/schemas/JustServe.Contracts.Enums.GeographyType" + }, + "assignedOn": { + "type": "string", + "format": "date-time" + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Projects.Contact": { + "type": "object", + "properties": { + "name": { + "type": "string", + "nullable": true + }, + "phone": { + "type": "string", + "nullable": true + }, + "email": { + "type": "string", + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Projects.DTL": { + "type": "object", + "properties": { + "id": { + "type": "string", + "nullable": true + }, + "timeSlots": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Projects.TimeSlot" + }, + "nullable": true + }, + "locationName": { + "type": "string", + "nullable": true + }, + "locationLink": { + "type": "string", + "nullable": true + }, + "location": { + "$ref": "#/components/schemas/JustServe.Contracts.Locations.Location" + }, + "specialDirections": { + "type": "string", + "nullable": true + }, + "specialDirectionsLanguage": { + "type": "object", + "additionalProperties": { + "type": "string", + "nullable": true + }, + "nullable": true + }, + "boundaries": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Projects.RegionCivicGeography" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Projects.OnGoing": { + "type": "object", + "properties": { + "id": { + "type": "string", + "nullable": true + }, + "start": { + "type": "string", + "format": "date-time" + }, + "renewDate": { + "type": "string", + "format": "date-time" + }, + "end": { + "type": "string", + "format": "date-time" + }, + "schedule": { + "type": "string", + "nullable": true + }, + "scheduleLanguage": { + "type": "object", + "additionalProperties": { + "type": "string", + "nullable": true + }, + "nullable": true + }, + "specialDirections": { + "type": "string", + "nullable": true + }, + "specialDirectionsLanguage": { + "type": "object", + "additionalProperties": { + "type": "string", + "nullable": true + }, + "nullable": true + }, + "locationName": { + "type": "string", + "nullable": true + }, + "locationLink": { + "type": "string", + "nullable": true + }, + "location": { + "$ref": "#/components/schemas/JustServe.Contracts.Locations.Location" + }, + "interested": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Projects.OngoingInterestRO" + }, + "nullable": true + }, + "contacts": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Projects.Contact" + }, + "nullable": true + }, + "boundaries": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Projects.RegionCivicGeography" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Projects.OngoingHoursServed": { + "type": "object", + "properties": { + "servedOn": { + "type": "string", + "format": "date-time" + }, + "hoursServed": { + "type": "number", + "format": "double" + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Projects.OngoingInterestRO": { + "type": "object", + "properties": { + "userId": { + "type": "string", + "nullable": true + }, + "interestedId": { + "type": "string", + "nullable": true + }, + "volunteerId": { + "type": "string", + "nullable": true + }, + "interestedLanguage": { + "type": "string", + "nullable": true + }, + "name": { + "type": "string", + "nullable": true + }, + "email": { + "type": "string", + "nullable": true + }, + "phone": { + "type": "string", + "nullable": true + }, + "schedule": { + "type": "string", + "nullable": true + }, + "date": { + "type": "string", + "format": "date-time" + }, + "groupSize": { + "type": "integer", + "format": "int32" + }, + "hoursServed": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Projects.OngoingHoursServed" + }, + "nullable": true + }, + "adminReportedHours": { + "type": "number", + "format": "double" + }, + "interestedOn": { + "type": "string", + "format": "date-time" + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Projects.Org": { + "type": "object", + "properties": { + "authorization": { + "type": "boolean" + }, + "organizationAuthorization": { + "type": "boolean", + "nullable": true + }, + "name": { + "type": "string", + "nullable": true + }, + "description": { + "type": "string", + "nullable": true + }, + "url": { + "type": "string", + "nullable": true + }, + "internalUrl": { + "type": "string", + "nullable": true + }, + "organizationId": { + "type": "string", + "nullable": true + }, + "reviewedBy": { + "type": "string", + "nullable": true + }, + "reviewedOn": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "linked": { + "type": "boolean" + }, + "logo": { + "type": "string", + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Projects.Project": { + "type": "object", + "properties": { + "id": { + "type": "string", + "nullable": true + }, + "projectOwners": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Projects.ProjectOwner" + }, + "nullable": true + }, + "projectOwnerLocation": { + "$ref": "#/components/schemas/JustServe.Contracts.Locations.Location" + }, + "ownerLog": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Logging.ProjectOwnerLog" + }, + "nullable": true + }, + "projectType": { + "$ref": "#/components/schemas/JustServe.Contracts.Enums.ProjectType" + }, + "status": { + "$ref": "#/components/schemas/JustServe.Contracts.Enums.ProjectStatus" + }, + "publishDate": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "language": { + "type": "string", + "nullable": true + }, + "country": { + "type": "string", + "nullable": true + }, + "title": { + "type": "string", + "nullable": true + }, + "shortDescription": { + "type": "string", + "nullable": true + }, + "longDescription": { + "type": "string", + "nullable": true + }, + "logo": { + "type": "string", + "nullable": true + }, + "attachments": { + "type": "array", + "items": { + "type": "string" + }, + "nullable": true + }, + "attachmentInfo": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.AttachmentInfo" + }, + "nullable": true + }, + "applicant": { + "$ref": "#/components/schemas/JustServe.Contracts.Projects.Applicant" + }, + "contact": { + "$ref": "#/components/schemas/JustServe.Contracts.Projects.Contact" + }, + "sponsor": { + "$ref": "#/components/schemas/JustServe.Contracts.Projects.Sponsor" + }, + "representative": { + "$ref": "#/components/schemas/JustServe.Contracts.Projects.Representative" + }, + "organization": { + "$ref": "#/components/schemas/JustServe.Contracts.Projects.Org" + }, + "suitableAllAges": { + "type": "boolean" + }, + "groupProject": { + "type": "boolean" + }, + "volunteerRemotely": { + "type": "boolean" + }, + "itemDonations": { + "type": "boolean" + }, + "wheelchairAccessible": { + "type": "boolean" + }, + "indoors": { + "type": "boolean" + }, + "forYouthGroups": { + "type": "boolean" + }, + "volunteerFromAnywhere": { + "type": "boolean" + }, + "regionSelected": { + "type": "boolean" + }, + "temporaryFakeDistanceScore": { + "type": "number", + "format": "double" + }, + "fakeDistanceScoreUpdate": { + "type": "string", + "format": "date-time" + }, + "skills": { + "type": "array", + "items": { + "type": "string" + }, + "nullable": true + }, + "interests": { + "type": "array", + "items": { + "type": "string" + }, + "nullable": true + }, + "tools": { + "type": "array", + "items": { + "type": "string" + }, + "nullable": true + }, + "projectSkills": { + "type": "array", + "items": { + "type": "integer", + "format": "int32" + }, + "nullable": true + }, + "projectInterests": { + "type": "array", + "items": { + "type": "integer", + "format": "int32" + }, + "nullable": true + }, + "projectTools": { + "type": "array", + "items": { + "type": "integer", + "format": "int32" + }, + "nullable": true + }, + "externalVolunteerURL": { + "type": "string", + "nullable": true + }, + "isExternalProject": { + "type": "boolean" + }, + "isUnlistedProject": { + "type": "boolean" + }, + "archivedProject": { + "type": "boolean" + }, + "isActive": { + "type": "boolean" + }, + "externalVolunteerCount": { + "type": "integer", + "format": "int32" + }, + "externalVolunteers": { + "type": "array", + "items": { + "type": "string", + "format": "date-time" + }, + "nullable": true + }, + "allEventsFilled": { + "type": "boolean" + }, + "daysOfWeek": { + "type": "array", + "items": { + "$ref": "#/components/schemas/System.DayOfWeek" + }, + "nullable": true + }, + "timesOfDay": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Enums.TimeOfDay" + }, + "nullable": true + }, + "waiverURL": { + "type": "string", + "nullable": true + }, + "dtl": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Projects.DTL" + }, + "nullable": true + }, + "onGoing": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Projects.OnGoing" + }, + "nullable": true + }, + "recurring": { + "$ref": "#/components/schemas/JustServe.Contracts.Projects.Recurring" + }, + "lastChangeReason": { + "type": "string", + "nullable": true + }, + "escalated": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "created": { + "type": "string", + "format": "date-time" + }, + "updated": { + "type": "string", + "format": "date-time" + }, + "createdBy": { + "type": "string", + "nullable": true + }, + "deleted": { + "type": "boolean" + }, + "deletedOn": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "deletedBy": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "firstStartDateTimeOffset": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "lastEndDateTimeOffset": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "cbfName": { + "type": "string", + "nullable": true + }, + "cblName": { + "type": "string", + "nullable": true + }, + "updatedBy": { + "type": "string", + "nullable": true + }, + "ubfName": { + "type": "string", + "nullable": true + }, + "ublName": { + "type": "string", + "nullable": true + }, + "volunteerCentersData": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.OrganizationSlim" + }, + "nullable": true + }, + "relativityScore": { + "type": "number", + "format": "double" + }, + "projectOwnerName": { + "type": "string", + "nullable": true + }, + "projectOwnerLastName": { + "type": "string", + "nullable": true + }, + "projectOwnerUserId": { + "type": "string", + "nullable": true + }, + "projectLocationType": { + "$ref": "#/components/schemas/JustServe.Contracts.Enums.ProjectLocationType" + }, + "underReview": { + "type": "boolean" + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Projects.ProjectBounded": { + "type": "object", + "properties": { + "id": { + "type": "string", + "nullable": true + }, + "name": { + "type": "string", + "nullable": true + }, + "projectOwners": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Projects.ProjectOwner" + }, + "nullable": true + }, + "locations": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Locations.Location" + }, + "nullable": true + }, + "status": { + "$ref": "#/components/schemas/JustServe.Contracts.Enums.ProjectStatus" + }, + "organization": { + "$ref": "#/components/schemas/JustServe.Contracts.Projects.Org" + }, + "createdBy": { + "type": "string", + "nullable": true + }, + "cbfName": { + "type": "string", + "nullable": true + }, + "cblName": { + "type": "string", + "nullable": true + }, + "startDate": { + "type": "string", + "format": "date-time" + }, + "endDate": { + "type": "string", + "format": "date-time" + }, + "isActive": { + "type": "boolean" + }, + "isUnlistedProject": { + "type": "boolean" + }, + "ongoing": { + "type": "boolean" + }, + "isDirectlyOwnedOrSponsored": { + "type": "boolean" + }, + "isOwnedOrRepresentedViaOrganization": { + "type": "boolean" + }, + "volunteersNeeded": { + "type": "integer", + "format": "int32" + }, + "volunteersAcquired": { + "type": "integer", + "format": "int32" + }, + "projectOwnerName": { + "type": "string", + "nullable": true + }, + "projectOwnerUserId": { + "type": "string", + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Projects.ProjectOwner": { + "type": "object", + "properties": { + "id": { + "type": "string", + "nullable": true + }, + "ownerType": { + "$ref": "#/components/schemas/JustServe.Contracts.Enums.OwnerType" + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Projects.ReassignDelete": { + "type": "object", + "properties": { + "assignId": { + "type": "string", + "nullable": true + }, + "deleteId": { + "type": "string", + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Projects.RecordOfService": { + "required": [ + "userId" + ], + "type": "object", + "properties": { + "id": { + "type": "string", + "nullable": true + }, + "userId": { + "minLength": 1, + "type": "string" + }, + "projectId": { + "type": "string", + "nullable": true + }, + "projectName": { + "type": "string", + "nullable": true + }, + "organizationName": { + "type": "string", + "nullable": true + }, + "volunteeredOn": { + "type": "string", + "format": "date-time" + }, + "hoursServed": { + "type": "number", + "format": "double" + }, + "deleted": { + "type": "boolean" + }, + "deletedOn": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "deletedBy": { + "type": "string", + "format": "uuid", + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Projects.Recurring": { + "type": "object", + "properties": { + "recurrenceId": { + "type": "string", + "nullable": true + }, + "start": { + "type": "string", + "format": "date-time" + }, + "end": { + "type": "string", + "format": "date-time" + }, + "location": { + "$ref": "#/components/schemas/JustServe.Contracts.Locations.Location" + }, + "locationName": { + "type": "string", + "nullable": true + }, + "specialDirections": { + "type": "string", + "nullable": true + }, + "recurringTimes": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Projects.RecurringTime" + }, + "nullable": true + }, + "boundaries": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Projects.RegionCivicGeography" + }, + "nullable": true + }, + "volunteeredRecurrences": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Projects.VolunteeredRecurrence" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Projects.RecurringTime": { + "type": "object", + "properties": { + "id": { + "type": "string", + "nullable": true + }, + "startTime": { + "type": "string", + "format": "date-time" + }, + "endTime": { + "type": "string", + "format": "date-time" + }, + "recurringType": { + "$ref": "#/components/schemas/JustServe.Contracts.Enums.RecurringType" + }, + "volunteersCapped": { + "type": "boolean" + }, + "groupsCapped": { + "type": "boolean" + }, + "groupLimit": { + "type": "integer", + "format": "int32" + }, + "totalVolunteersNeeded": { + "type": "integer", + "format": "int32" + }, + "contacts": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Projects.Contact" + }, + "nullable": true + }, + "sunday": { + "type": "boolean" + }, + "monday": { + "type": "boolean" + }, + "tuesday": { + "type": "boolean" + }, + "wednesday": { + "type": "boolean" + }, + "thursday": { + "type": "boolean" + }, + "friday": { + "type": "boolean" + }, + "saturday": { + "type": "boolean" + }, + "firstWeek": { + "type": "boolean" + }, + "secondWeek": { + "type": "boolean" + }, + "thirdWeek": { + "type": "boolean" + }, + "fourthWeek": { + "type": "boolean" + }, + "fifthWeek": { + "type": "boolean" + }, + "lastWeek": { + "type": "boolean" + }, + "daysOfMonth": { + "type": "array", + "items": { + "type": "integer", + "format": "int32" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Projects.RegionCivicGeography": { + "type": "object", + "properties": { + "type": { + "$ref": "#/components/schemas/JustServe.Contracts.Enums.GeographyType" + }, + "name": { + "type": "string", + "nullable": true + }, + "id": { + "type": "string", + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Projects.Representative": { + "type": "object", + "properties": { + "name": { + "type": "string", + "nullable": true + }, + "email": { + "type": "string", + "nullable": true + }, + "userId": { + "type": "string", + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Projects.Sponsor": { + "type": "object", + "properties": { + "name": { + "type": "string", + "nullable": true + }, + "email": { + "type": "string", + "nullable": true + }, + "phone": { + "type": "string", + "nullable": true + }, + "userId": { + "type": "string", + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Projects.TimeSlot": { + "type": "object", + "properties": { + "id": { + "type": "string", + "nullable": true + }, + "start": { + "type": "string", + "format": "date-time" + }, + "end": { + "type": "string", + "format": "date-time" + }, + "startFormatted": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "endFormatted": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "timezone": { + "type": "string", + "nullable": true + }, + "shiftTitle": { + "type": "string", + "nullable": true + }, + "volunteersCapped": { + "type": "boolean" + }, + "groupsCapped": { + "type": "boolean" + }, + "groupLimit": { + "type": "integer", + "format": "int32" + }, + "existingVolunteers": { + "type": "integer", + "format": "int32" + }, + "totalVolunteersNeeded": { + "type": "integer", + "format": "int32" + }, + "eventCapReached": { + "type": "boolean" + }, + "contacts": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Projects.Contact" + }, + "nullable": true + }, + "volunteers": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Projects.VolunteerRO" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Projects.VolunteerRO": { + "type": "object", + "properties": { + "userId": { + "type": "string", + "nullable": true + }, + "volunteerId": { + "type": "string", + "nullable": true + }, + "volunteerLanguage": { + "type": "string", + "nullable": true + }, + "name": { + "type": "string", + "nullable": true + }, + "email": { + "type": "string", + "nullable": true + }, + "phone": { + "type": "string", + "nullable": true + }, + "groupSize": { + "type": "integer", + "format": "int32" + }, + "hoursServed": { + "type": "number", + "format": "double" + }, + "adminReportedHours": { + "type": "number", + "format": "double" + }, + "hoursUpdated": { + "type": "boolean" + }, + "skills": { + "type": "array", + "items": { + "type": "string" + }, + "nullable": true + }, + "volunteeredOn": { + "type": "string", + "format": "date-time" + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Projects.VolunteeredRecurrence": { + "type": "object", + "properties": { + "volunteeredRecurrenceId": { + "type": "string", + "nullable": true + }, + "recurringTimeId": { + "type": "string", + "nullable": true + }, + "start": { + "type": "string", + "format": "date-time" + }, + "end": { + "type": "string", + "format": "date-time" + }, + "eventCapReached": { + "type": "boolean" + }, + "volunteers": { + "type": "array", + "items": { + "type": "string" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Requests.AdminPendingProjectsSearchRequest": { + "required": [ + "adminSubordinateFilterModifier", + "page", + "size" + ], + "type": "object", + "properties": { + "page": { + "type": "integer", + "format": "int32" + }, + "size": { + "type": "integer", + "format": "int32" + }, + "adminSubordinateFilterModifier": { + "$ref": "#/components/schemas/JustServe.Contracts.Enums.AdminSubordinateFilterModifier" + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Requests.AdminSearchOrganizationsViewModel": { + "type": "object", + "properties": { + "activeOnly": { + "type": "boolean" + }, + "filter": { + "$ref": "#/components/schemas/JustServe.Contracts.Enums.SearchFilter" + }, + "filterValue": { + "type": "string", + "nullable": true + }, + "getLinkedProjects": { + "type": "boolean" + }, + "includeAll": { + "type": "boolean" + }, + "includeManaged": { + "type": "boolean" + }, + "includeOrgOwnerInfo": { + "type": "boolean" + }, + "orderBy": { + "$ref": "#/components/schemas/JustServe.Contracts.Enums.AdminSearchOrderBy" + }, + "page": { + "type": "integer", + "format": "int32" + }, + "reverse": { + "type": "boolean" + }, + "size": { + "type": "integer", + "format": "int32" + }, + "type": { + "$ref": "#/components/schemas/JustServe.Contracts.Enums.OrganizationType" + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Requests.AdminUserSearchRequest": { + "required": [ + "page", + "size" + ], + "type": "object", + "properties": { + "page": { + "type": "integer", + "format": "int32" + }, + "size": { + "type": "integer", + "format": "int32" + }, + "ldsGeographyId": { + "type": "string", + "format": "uuid" + }, + "boundaryName": { + "type": "string", + "nullable": true + }, + "showChildren": { + "type": "boolean" + }, + "name": { + "type": "string", + "nullable": true + }, + "email": { + "type": "string", + "nullable": true + }, + "civicBoundaryId": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "civicBoundaryName": { + "type": "string", + "nullable": true + }, + "civicBoundaryChildren": { + "type": "boolean" + }, + "city": { + "type": "string", + "nullable": true + }, + "state": { + "type": "string", + "nullable": true + }, + "zip": { + "type": "string", + "nullable": true + }, + "org": { + "type": "string", + "nullable": true + }, + "isSpecialist": { + "type": "boolean" + }, + "isCommunity": { + "type": "boolean" + }, + "isNonAdmin": { + "type": "boolean" + }, + "isLeadOnly": { + "type": "boolean" + }, + "isOrg": { + "type": "boolean" + }, + "specialist": { + "type": "string", + "nullable": true + }, + "community": { + "type": "string", + "nullable": true + }, + "nonAdmin": { + "type": "string", + "nullable": true + }, + "leadOnly": { + "type": "string", + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Requests.AttachmentUploadModel": { + "type": "object", + "properties": { + "base64": { + "type": "string", + "nullable": true + }, + "fileName": { + "type": "string", + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Requests.BoundaryUpdateDeleteViewModel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "nullable": true + }, + "boundaryType": { + "$ref": "#/components/schemas/JustServe.Contracts.Enums.BoundaryType" + }, + "updateInfo": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.BoundaryUserInfoModel" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Requests.BoundaryUserInfoModel": { + "type": "object", + "properties": { + "userId": { + "type": "string", + "nullable": true + }, + "role": { + "$ref": "#/components/schemas/JustServe.Contracts.Enums.Role" + }, + "addCivicGeographyIds": { + "type": "array", + "items": { + "type": "string" + }, + "nullable": true + }, + "removeCivicGeographyIds": { + "type": "array", + "items": { + "type": "string" + }, + "nullable": true + }, + "deleteUser": { + "type": "boolean" + }, + "setRep": { + "type": "boolean" + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Requests.ChangePasswordViewModel": { + "required": [ + "newPassword" + ], + "type": "object", + "properties": { + "existingPassword": { + "type": "string", + "nullable": true + }, + "newPassword": { + "maxLength": 100, + "minLength": 8, + "type": "string", + "format": "password" + }, + "confirmPassword": { + "type": "string", + "format": "password", + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Requests.ChurchGeographyAdminLabelEnumRequest": { + "type": "object", + "properties": { + "churchGeographyId": { + "type": "string", + "format": "uuid" + }, + "name": { + "type": "string", + "nullable": true + }, + "description": { + "type": "string", + "nullable": true + }, + "createdBy": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "languageId": { + "type": "integer", + "format": "int32" + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Requests.ChurchGeographyAdminLabelEnumUpdateRequest": { + "type": "object", + "properties": { + "churchGeographyAdminLabelEnumId": { + "type": "string", + "format": "uuid" + }, + "churchGeographyId": { + "type": "string", + "format": "uuid" + }, + "updatedBy": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "name": { + "type": "string", + "nullable": true + }, + "description": { + "type": "string", + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Requests.CloneProjectRequest": { + "type": "object", + "properties": { + "projectIdToClone": { + "type": "string", + "format": "uuid" + }, + "userIdToAssign": { + "type": "string", + "format": "uuid" + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Requests.ContactUsReciepientViewModel": { + "type": "object", + "properties": { + "country": { + "type": "string", + "nullable": true + }, + "postal": { + "type": "string", + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Requests.ContactUsViewModel": { + "required": [ + "body", + "country", + "email", + "name" + ], + "type": "object", + "properties": { + "name": { + "maxLength": 150, + "minLength": 1, + "type": "string" + }, + "email": { + "maxLength": 150, + "minLength": 1, + "type": "string" + }, + "body": { + "maxLength": 300, + "minLength": 1, + "type": "string" + }, + "country": { + "minLength": 1, + "type": "string" + }, + "postal": { + "type": "string", + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Requests.CreateUpdateAnnouncementViewModel": { + "type": "object", + "properties": { + "title": { + "type": "string", + "nullable": true + }, + "content": { + "type": "string", + "nullable": true + }, + "url": { + "type": "string", + "nullable": true + }, + "pictures": { + "type": "array", + "items": { + "type": "string" + }, + "nullable": true + }, + "videos": { + "type": "array", + "items": { + "type": "string" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Requests.CropViewModel": { + "type": "object", + "properties": { + "base64": { + "type": "string", + "nullable": true + }, + "x": { + "type": "integer", + "format": "int32" + }, + "y": { + "type": "integer", + "format": "int32" + }, + "height": { + "type": "integer", + "format": "int32" + }, + "width": { + "type": "integer", + "format": "int32" + }, + "maxWidth": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "maxHeight": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "squareWrapper": { + "type": "boolean", + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Requests.CustomNotificationModel": { + "type": "object", + "properties": { + "locationId": { + "type": "string", + "nullable": true + }, + "geographyType": { + "$ref": "#/components/schemas/JustServe.Contracts.Enums.GeographyType" + }, + "type": { + "$ref": "#/components/schemas/JustServe.Contracts.Enums.NotificationType" + }, + "level": { + "$ref": "#/components/schemas/JustServe.Contracts.Enums.NotificationLevel" + }, + "title": { + "type": "string", + "nullable": true + }, + "description": { + "type": "string", + "nullable": true + }, + "lang": { + "type": "string", + "nullable": true + }, + "redirectLink": { + "type": "string", + "nullable": true + }, + "startDate": { + "type": "string", + "format": "date-time" + }, + "endDate": { + "type": "string", + "format": "date-time" + }, + "isAdminOnly": { + "type": "boolean" + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Requests.DTLVolunteer": { + "type": "object", + "properties": { + "id": { + "type": "string", + "nullable": true + }, + "timeSlots": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.TimeSlotVolunteer" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Requests.DailyUserHashModel": { + "type": "object", + "properties": { + "email": { + "type": "string", + "nullable": true + }, + "userId": { + "type": "string", + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Requests.HomepageProjectRequest": { + "type": "object", + "properties": { + "locationSearchText": { + "type": "string", + "nullable": true + }, + "longitude": { + "type": "number", + "format": "double" + }, + "latitude": { + "type": "number", + "format": "double" + }, + "browserLocale": { + "type": "string", + "nullable": true + }, + "countryCode": { + "type": "string", + "nullable": true + }, + "refreshCache": { + "type": "boolean" + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Requests.HoursServedBulkModel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "nullable": true + }, + "hours": { + "type": "number", + "format": "double" + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Requests.HoursServedItemViewModel": { + "required": [ + "hours" + ], + "type": "object", + "properties": { + "hours": { + "type": "number", + "format": "double" + }, + "when": { + "type": "string", + "format": "date-time" + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Requests.HoursServedViewModel": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.HoursServedItemViewModel" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Requests.ImageUploadRequest": { + "type": "object", + "properties": { + "base64": { + "type": "string", + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Requests.LatLongPostal": { + "type": "object", + "properties": { + "longitude": { + "type": "number", + "format": "double" + }, + "latitude": { + "type": "number", + "format": "double" + }, + "postalCode": { + "type": "string", + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Requests.LocationMapsObject": { + "type": "object", + "properties": { + "address": { + "type": "string", + "nullable": true + }, + "city": { + "type": "string", + "nullable": true + }, + "county": { + "type": "string", + "nullable": true + }, + "state": { + "type": "string", + "nullable": true + }, + "postal": { + "type": "string", + "nullable": true + }, + "country": { + "type": "string", + "nullable": true + }, + "countryCode": { + "type": "string", + "nullable": true + }, + "longitude": { + "type": "number", + "format": "double" + }, + "latitude": { + "type": "number", + "format": "double" + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Requests.LocationString": { + "required": [ + "location" + ], + "type": "object", + "properties": { + "location": { + "minLength": 1, + "type": "string" + }, + "lang": { + "type": "string", + "nullable": true + }, + "countryCode": { + "type": "string", + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Requests.Mobile.LogInModel": { + "type": "object", + "properties": { + "grantType": { + "type": "string", + "nullable": true + }, + "username": { + "type": "string", + "nullable": true + }, + "password": { + "type": "string", + "nullable": true + }, + "clientId": { + "type": "string", + "nullable": true + }, + "clientSecret": { + "type": "string", + "nullable": true + }, + "refreshToken": { + "type": "string", + "nullable": true + }, + "facebookToken": { + "type": "string", + "nullable": true + }, + "googleToken": { + "type": "string", + "nullable": true + }, + "appleToken": { + "type": "string", + "nullable": true + }, + "appleAuthCode": { + "type": "string", + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Requests.Mobile.MobileOrgSearchModel": { + "type": "object", + "properties": { + "latitude": { + "type": "number", + "format": "double", + "nullable": true + }, + "longitude": { + "type": "number", + "format": "double", + "nullable": true + }, + "location": { + "type": "string", + "nullable": true + }, + "keywords": { + "type": "string", + "nullable": true + }, + "organizationType": { + "$ref": "#/components/schemas/JustServe.Contracts.Enums.OrganizationType" + }, + "searchRadius": { + "type": "integer", + "format": "int32" + }, + "distanceUnits": { + "type": "string", + "nullable": true + }, + "sortBy": { + "type": "string", + "nullable": true + }, + "language": { + "type": "string", + "nullable": true + }, + "page": { + "type": "integer", + "format": "int32" + }, + "size": { + "type": "integer", + "format": "int32" + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Requests.Mobile.MobileProjectFAYT": { + "type": "object", + "properties": { + "keywords": { + "type": "string", + "nullable": true + }, + "location": { + "type": "string", + "nullable": true + }, + "latitude": { + "type": "number", + "format": "double", + "nullable": true + }, + "longitude": { + "type": "number", + "format": "double", + "nullable": true + }, + "radius": { + "type": "number", + "format": "double", + "nullable": true + }, + "distanceType": { + "$ref": "#/components/schemas/JustServe.Contracts.Enums.DistanceType" + }, + "language": { + "type": "string", + "nullable": true + }, + "volunteerFromAnywhere": { + "type": "boolean", + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Requests.Mobile.MobileProjectSearchRequestModel": { + "type": "object", + "properties": { + "latitude": { + "type": "number", + "format": "double", + "nullable": true + }, + "longitude": { + "type": "number", + "format": "double", + "nullable": true + }, + "location": { + "type": "string", + "nullable": true + }, + "keywords": { + "type": "string", + "nullable": true + }, + "searchRadius": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "distanceUnits": { + "type": "string", + "nullable": true + }, + "startDate": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "endDate": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "projectOptions": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.Mobile.ProjectOptions" + }, + "projectType": { + "type": "string", + "nullable": true + }, + "skillIds": { + "type": "array", + "items": { + "type": "string" + }, + "nullable": true + }, + "interestIds": { + "type": "array", + "items": { + "type": "string" + }, + "nullable": true + }, + "language": { + "type": "string", + "nullable": true + }, + "country": { + "type": "string", + "nullable": true + }, + "sortBy": { + "type": "string", + "nullable": true + }, + "page": { + "type": "integer", + "format": "int32" + }, + "size": { + "type": "integer", + "format": "int32" + }, + "days": { + "type": "array", + "items": { + "type": "string" + }, + "nullable": true + }, + "times": { + "type": "array", + "items": { + "type": "string" + }, + "nullable": true + }, + "getProjectSearchOrderBy": { + "$ref": "#/components/schemas/JustServe.Contracts.Enums.ProjectSearchOrderBy" + }, + "getProjectType": { + "$ref": "#/components/schemas/JustServe.Contracts.Enums.ProjectType" + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Requests.Mobile.MobileProjectVolunteerModel": { + "type": "object", + "properties": { + "email": { + "type": "string", + "nullable": true + }, + "phone": { + "type": "string", + "nullable": true + }, + "schedule": { + "type": "string", + "nullable": true + }, + "date": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "groupSize": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "skills": { + "type": "array", + "items": { + "type": "string" + }, + "nullable": true + }, + "details": { + "type": "string", + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Requests.Mobile.MobileStringList": { + "required": [ + "ids" + ], + "type": "object", + "properties": { + "ids": { + "minItems": 1, + "type": "array", + "items": { + "type": "string", + "format": "uuid" + } + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Requests.Mobile.MobileUpdateUserModel": { + "type": "object", + "properties": { + "personal": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.Personalsettings" + }, + "location": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.Mobile.MobileLocationSlim" + }, + "projectOptions": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.Mobile.Projectsearchpreferences" + }, + "contactOptions": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.Mobile.Notificationsettings" + }, + "interests": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.Mobile.Interests" + }, + "skills": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.Mobile.Skills" + }, + "tools": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.Mobile.Tools" + }, + "daysOfTheWeek": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.Mobile.DaysOfTheWeek" + }, + "timesOfDay": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.Mobile.TimesOfDay" + }, + "favoriteOrganizations": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.Mobile.Favoriteorganizations" + }, + "favoriteProjects": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.Mobile.Favoriteprojects" + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Requests.Mobile.ProjectOptions": { + "type": "object", + "properties": { + "suitableForAllAges": { + "type": "boolean", + "nullable": true + }, + "groupProject": { + "type": "boolean", + "nullable": true + }, + "volunteerFromHome": { + "type": "boolean", + "nullable": true + }, + "itemDonations": { + "type": "boolean", + "nullable": true + }, + "wheelchairAccessible": { + "type": "boolean", + "nullable": true + }, + "indoors": { + "type": "boolean", + "nullable": true + }, + "forYouthGroups": { + "type": "boolean", + "nullable": true + }, + "volunteerFromAnywhere": { + "type": "boolean", + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Requests.Mobile.RefreshTokenModel": { + "type": "object", + "properties": { + "clientId": { + "type": "string", + "nullable": true + }, + "clientSecret": { + "type": "string", + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Requests.OngoingInterestViewModel": { + "required": [ + "date", + "schedule" + ], + "type": "object", + "properties": { + "schedule": { + "minLength": 1, + "type": "string" + }, + "date": { + "type": "string", + "format": "date-time" + }, + "email": { + "type": "string", + "nullable": true + }, + "phone": { + "type": "string", + "nullable": true + }, + "country": { + "type": "string", + "nullable": true, + "deprecated": true + }, + "postal": { + "type": "string", + "nullable": true, + "deprecated": true + }, + "city": { + "type": "string", + "nullable": true, + "deprecated": true + }, + "skills": { + "type": "array", + "items": { + "type": "integer", + "format": "int32" + }, + "nullable": true + }, + "comments": { + "type": "string", + "nullable": true + }, + "groupSize": { + "type": "integer", + "format": "int32" + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Requests.OrganizationCreateRequest": { + "type": "object", + "properties": { + "autoRedirect": { + "type": "boolean" + }, + "banner": { + "type": "string", + "nullable": true + }, + "contactEmail": { + "type": "string", + "nullable": true + }, + "contactName": { + "type": "string", + "nullable": true + }, + "contactPhone": { + "type": "string", + "nullable": true + }, + "description": { + "type": "string", + "nullable": true + }, + "facebookPath": { + "type": "string", + "nullable": true + }, + "instagramPath": { + "type": "string", + "nullable": true + }, + "linkedInPath": { + "type": "string", + "nullable": true + }, + "locationString": { + "type": "string", + "nullable": true + }, + "logo": { + "type": "string", + "nullable": true + }, + "name": { + "type": "string", + "nullable": true + }, + "twitterPath": { + "type": "string", + "nullable": true + }, + "url": { + "type": "string", + "nullable": true + }, + "website": { + "type": "string", + "nullable": true + }, + "youTubePath": { + "type": "string", + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Requests.OrganizationProjectSearchRequest": { + "type": "object", + "properties": { + "includeAdminInfo": { + "type": "boolean" + }, + "isDisasterRecovery": { + "type": "boolean" + }, + "page": { + "type": "integer", + "format": "int32" + }, + "size": { + "type": "integer", + "format": "int32" + }, + "projectType": { + "$ref": "#/components/schemas/JustServe.Contracts.Enums.ProjectType" + }, + "keywords": { + "type": "string", + "nullable": true + }, + "language": { + "type": "string", + "nullable": true + }, + "volunteerCauseId": { + "type": "string", + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Requests.OrganizationTypeModel": { + "type": "object", + "properties": { + "organizationType": { + "$ref": "#/components/schemas/JustServe.Contracts.Enums.OrganizationType" + }, + "organizationId": { + "type": "string", + "format": "uuid" + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Requests.OrganizationUpdateRequest": { + "type": "object", + "properties": { + "autoRedirect": { + "type": "boolean" + }, + "banner": { + "type": "string", + "nullable": true + }, + "contactEmail": { + "type": "string", + "nullable": true + }, + "contactName": { + "type": "string", + "nullable": true + }, + "contactPhone": { + "type": "string", + "nullable": true + }, + "description": { + "type": "string", + "nullable": true + }, + "facebookPath": { + "type": "string", + "nullable": true + }, + "instagramPath": { + "type": "string", + "nullable": true + }, + "linkedInPath": { + "type": "string", + "nullable": true + }, + "locationString": { + "type": "string", + "nullable": true + }, + "logo": { + "type": "string", + "nullable": true + }, + "name": { + "type": "string", + "nullable": true + }, + "twitterPath": { + "type": "string", + "nullable": true + }, + "website": { + "type": "string", + "nullable": true + }, + "youTubePath": { + "type": "string", + "nullable": true + }, + "organizationType": { + "$ref": "#/components/schemas/JustServe.Contracts.Enums.OrganizationType" + }, + "volunteerCenterInfo": { + "$ref": "#/components/schemas/JustServe.Contracts.Organizations.VolunteerCenterInfo" + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Requests.ProjectAnnouncementViewModel": { + "required": [ + "message", + "objectId", + "projectId", + "senderId", + "userIds" + ], + "type": "object", + "properties": { + "senderId": { + "minLength": 1, + "type": "string" + }, + "projectId": { + "minLength": 1, + "type": "string" + }, + "objectId": { + "minLength": 1, + "type": "string" + }, + "message": { + "minLength": 1, + "type": "string" + }, + "subject": { + "type": "string", + "nullable": true + }, + "userIds": { + "type": "array", + "items": { + "type": "string" + } + }, + "volunteerIds": { + "type": "array", + "items": { + "type": "string" + }, + "nullable": true + }, + "isDisaster": { + "type": "boolean" + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Requests.ProjectLocationFilterValues": { + "required": [ + "filterValue" + ], + "type": "object", + "properties": { + "filterValue": { + "minLength": 1, + "type": "string" + }, + "address": { + "type": "string", + "nullable": true + }, + "postalCode": { + "type": "string", + "nullable": true + }, + "city": { + "type": "string", + "nullable": true + }, + "neighborhood": { + "type": "string", + "nullable": true + }, + "state": { + "type": "string", + "nullable": true + }, + "projectLocationType": { + "$ref": "#/components/schemas/JustServe.Contracts.Enums.ProjectLocationType" + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Requests.ProjectSearchRequestV2": { + "required": [ + "page", + "size" + ], + "type": "object", + "properties": { + "page": { + "type": "integer", + "format": "int32" + }, + "size": { + "type": "integer", + "format": "int32" + }, + "projectTitleFilterValue": { + "type": "string", + "nullable": true + }, + "projectLocationFilterValues": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.ProjectLocationFilterValues" + }, + "organizationNameFilterValue": { + "type": "string", + "nullable": true + }, + "projectUserNameFilterValues": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.ProjectUserNameEmailFilterValues" + }, + "projectUserEmailFilterValues": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.ProjectUserNameEmailFilterValues" + }, + "projectLongDescriptionFilterValue": { + "type": "string", + "nullable": true + }, + "startDate": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "startDateFilterModifier": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "endDate": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "endDateFilterModifier": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "projectStatusFilterValues": { + "type": "array", + "items": { + "type": "integer", + "format": "int32" + }, + "nullable": true + }, + "isUnlistedProject": { + "type": "boolean", + "nullable": true + }, + "isExpiredProject": { + "type": "boolean", + "nullable": true + }, + "sortBy": { + "$ref": "#/components/schemas/JustServe.Contracts.Enums.SortByFilterModifier" + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Requests.ProjectUserNameEmailFilterValues": { + "required": [ + "filterValue", + "userNameEmailFilterModifiers" + ], + "type": "object", + "properties": { + "filterValue": { + "minLength": 1, + "type": "string" + }, + "userNameEmailFilterModifiers": { + "type": "array", + "items": { + "type": "integer", + "format": "int32" + } + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Requests.QuickSearchCreateRequest": { + "type": "object", + "properties": { + "userId": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "title": { + "type": "string", + "nullable": true + }, + "searchType": { + "$ref": "#/components/schemas/JustServe.Contracts.Enums.QuickSearchType" + }, + "adminProjectSearchParameters": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.ProjectSearchRequestV2" + }, + "adminUserSearchParameters": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.AdminUserSearchRequest" + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Requests.RecoverAccountViewModel": { + "required": [ + "email" + ], + "type": "object", + "properties": { + "email": { + "minLength": 1, + "type": "string", + "format": "email" + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Requests.ResendActivationEmail": { + "required": [ + "email" + ], + "type": "object", + "properties": { + "email": { + "minLength": 1, + "type": "string" + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Requests.ResetPasswordViewModel": { + "required": [ + "newPassword" + ], + "type": "object", + "properties": { + "newPassword": { + "maxLength": 100, + "minLength": 8, + "type": "string", + "format": "password" + }, + "confirmPassword": { + "type": "string", + "format": "password", + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Requests.SearchAdminProjectsViewModel": { + "type": "object", + "properties": { + "title": { + "type": "string", + "nullable": true + }, + "keyword": { + "type": "string", + "nullable": true + }, + "organization": { + "type": "string", + "nullable": true + }, + "adminName": { + "type": "string", + "nullable": true + }, + "submitter": { + "type": "string", + "nullable": true + }, + "location": { + "type": "string", + "nullable": true + }, + "page": { + "type": "integer", + "format": "int32" + }, + "size": { + "type": "integer", + "format": "int32" + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Requests.SearchAdminProjectsViewModelv2": { + "type": "object", + "properties": { + "filter": { + "$ref": "#/components/schemas/JustServe.Contracts.Enums.AdminProjectSearchFilter" + }, + "userId": { + "type": "string", + "nullable": true + }, + "filterValue": { + "type": "string", + "nullable": true + }, + "includeManaged": { + "type": "boolean" + }, + "includeOrgs": { + "type": "boolean" + }, + "page": { + "type": "integer", + "format": "int32" + }, + "size": { + "type": "integer", + "format": "int32" + }, + "orderBy": { + "$ref": "#/components/schemas/JustServe.Contracts.Enums.AdminSearchOrderBy" + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Requests.SearchAdminStoriesViewModel": { + "type": "object", + "properties": { + "filterValue": { + "type": "string", + "nullable": true + }, + "filter": { + "$ref": "#/components/schemas/JustServe.Contracts.Enums.SearchFilter" + }, + "includeManaged": { + "type": "boolean" + }, + "page": { + "type": "integer", + "format": "int32" + }, + "size": { + "type": "integer", + "format": "int32" + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Requests.SearchOrganizationsViewModel": { + "type": "object", + "properties": { + "latitude": { + "type": "number", + "format": "double" + }, + "longitude": { + "type": "number", + "format": "double" + }, + "keywords": { + "type": "string", + "nullable": true + }, + "location": { + "type": "string", + "nullable": true + }, + "radius": { + "type": "integer", + "format": "int32" + }, + "radiusType": { + "$ref": "#/components/schemas/JustServe.Contracts.Enums.DistanceType" + }, + "sortBy": { + "type": "string", + "nullable": true + }, + "page": { + "type": "integer", + "format": "int32" + }, + "size": { + "type": "integer", + "format": "int32" + }, + "organizationType": { + "$ref": "#/components/schemas/JustServe.Contracts.Enums.OrganizationType" + }, + "lang": { + "type": "string", + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Requests.SearchProjectsGlobalViewModel": { + "type": "object", + "properties": { + "keywords": { + "type": "string", + "nullable": true + }, + "page": { + "type": "integer", + "format": "int32" + }, + "size": { + "type": "integer", + "format": "int32" + }, + "language": { + "type": "string", + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Requests.SearchProjectsNewsletterModel": { + "type": "object", + "properties": { + "latitude": { + "type": "number", + "format": "double" + }, + "longitude": { + "type": "number", + "format": "double" + }, + "searchType": { + "$ref": "#/components/schemas/JustServe.Contracts.Enums.SearchLocationType" + }, + "radius": { + "type": "integer", + "format": "int32" + }, + "radiusType": { + "$ref": "#/components/schemas/JustServe.Contracts.Enums.DistanceType" + }, + "start": { + "type": "string", + "format": "date-time" + }, + "page": { + "type": "integer", + "format": "int32" + }, + "size": { + "type": "integer", + "format": "int32" + }, + "sortBy": { + "type": "string", + "nullable": true + }, + "language": { + "type": "string", + "nullable": true + }, + "browserLocale": { + "type": "string", + "nullable": true + }, + "getProjectSearchOrderBy": { + "$ref": "#/components/schemas/JustServe.Contracts.Enums.ProjectSearchOrderBy" + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Requests.SearchProjectsViewModel": { + "type": "object", + "properties": { + "latitude": { + "type": "number", + "format": "double" + }, + "longitude": { + "type": "number", + "format": "double" + }, + "searchType": { + "$ref": "#/components/schemas/JustServe.Contracts.Enums.SearchLocationType" + }, + "radius": { + "type": "integer", + "format": "int32" + }, + "radiusType": { + "$ref": "#/components/schemas/JustServe.Contracts.Enums.DistanceType" + }, + "start": { + "type": "string", + "format": "date-time" + }, + "page": { + "type": "integer", + "format": "int32" + }, + "size": { + "type": "integer", + "format": "int32" + }, + "sortBy": { + "type": "string", + "nullable": true + }, + "language": { + "type": "string", + "nullable": true + }, + "browserLocale": { + "type": "string", + "nullable": true + }, + "getProjectSearchOrderBy": { + "$ref": "#/components/schemas/JustServe.Contracts.Enums.ProjectSearchOrderBy" + }, + "keywords": { + "type": "string", + "nullable": true + }, + "location": { + "type": "string", + "nullable": true + }, + "end": { + "type": "string", + "format": "date-time" + }, + "suitableAllAges": { + "type": "boolean" + }, + "groupProject": { + "type": "boolean" + }, + "volunteerRemotely": { + "type": "boolean" + }, + "volunteerFromAnywhere": { + "type": "boolean" + }, + "itemDonations": { + "type": "boolean" + }, + "wheelchairAccessible": { + "type": "boolean" + }, + "indoors": { + "type": "boolean" + }, + "onGoing": { + "type": "boolean" + }, + "dtl": { + "type": "boolean" + }, + "skills": { + "type": "array", + "items": { + "type": "integer", + "format": "int32" + }, + "nullable": true + }, + "interests": { + "type": "array", + "items": { + "type": "integer", + "format": "int32" + }, + "nullable": true + }, + "userInitiatedSearch": { + "type": "boolean" + }, + "includeOrgInfo": { + "type": "boolean" + }, + "includeFilledProjects": { + "type": "boolean" + }, + "disasterRecoveryProjectsOnly": { + "type": "boolean" + }, + "daysOfWeek": { + "type": "array", + "items": { + "$ref": "#/components/schemas/System.DayOfWeek" + }, + "nullable": true + }, + "timesOfDay": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Enums.TimeOfDay" + }, + "nullable": true + }, + "publishedOnly": { + "type": "boolean" + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Requests.SearchUsersViewModel": { + "required": [ + "value" + ], + "type": "object", + "properties": { + "value": { + "minLength": 1, + "type": "string" + }, + "page": { + "type": "integer", + "format": "int32" + }, + "size": { + "type": "integer", + "format": "int32" + }, + "orderBy": { + "type": "string", + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Requests.StatusChangeViewModel": { + "type": "object", + "properties": { + "reason": { + "type": "string", + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Requests.StoriesSearchViewModel": { + "type": "object", + "properties": { + "search": { + "type": "string", + "nullable": true + }, + "locationSearch": { + "type": "string", + "nullable": true + }, + "countryCode": { + "type": "string", + "nullable": true + }, + "page": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "size": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "radiusType": { + "$ref": "#/components/schemas/JustServe.Contracts.Enums.DistanceType" + }, + "lang": { + "type": "string", + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Requests.SuccessStoryViewModel": { + "type": "object", + "properties": { + "projectId": { + "type": "string", + "nullable": true + }, + "language": { + "type": "string", + "nullable": true + }, + "title": { + "type": "string", + "nullable": true + }, + "body": { + "type": "string", + "nullable": true + }, + "images": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.ImagePairDetails" + }, + "nullable": true + }, + "mainImage": { + "$ref": "#/components/schemas/JustServe.Contracts.ImagePairDetails" + }, + "videos": { + "type": "array", + "items": { + "type": "string" + }, + "nullable": true + }, + "videoURL": { + "type": "string", + "nullable": true + }, + "location": { + "type": "string", + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Requests.TimeSlotVolunteer": { + "type": "object", + "properties": { + "id": { + "type": "string", + "nullable": true + }, + "groupSize": { + "type": "integer", + "format": "int32" + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Requests.UpdateUserModel": { + "type": "object", + "properties": { + "firstName": { + "maxLength": 50, + "minLength": 1, + "type": "string", + "nullable": true + }, + "lastName": { + "maxLength": 50, + "minLength": 1, + "type": "string", + "nullable": true + }, + "address": { + "type": "string", + "nullable": true + }, + "city": { + "type": "string", + "nullable": true + }, + "neighborhood": { + "type": "string", + "nullable": true + }, + "state": { + "type": "string", + "nullable": true + }, + "postal": { + "type": "string", + "nullable": true + }, + "country": { + "type": "string", + "nullable": true + }, + "countryCode": { + "type": "string", + "nullable": true + }, + "userName": { + "maxLength": 200, + "minLength": 5, + "type": "string", + "nullable": true + }, + "email": { + "type": "string", + "nullable": true + }, + "phone": { + "type": "string", + "nullable": true + }, + "language": { + "type": "string", + "nullable": true + }, + "generalEmailOptIn": { + "type": "boolean", + "nullable": true + }, + "generalMarketingOptIn": { + "type": "boolean", + "nullable": true + }, + "volunteerNewsletter": { + "type": "boolean", + "nullable": true + }, + "includeSponsorAdminInfo": { + "type": "boolean", + "nullable": true + }, + "volunteerNewsletterRadius": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "adminNewsletter": { + "type": "boolean", + "nullable": true + }, + "skills": { + "type": "array", + "items": { + "type": "string" + }, + "nullable": true + }, + "interests": { + "type": "array", + "items": { + "type": "string" + }, + "nullable": true + }, + "tools": { + "type": "array", + "items": { + "type": "string" + }, + "nullable": true + }, + "userSkills": { + "type": "array", + "items": { + "type": "integer", + "format": "int32" + }, + "nullable": true + }, + "userInterests": { + "type": "array", + "items": { + "type": "integer", + "format": "int32" + }, + "nullable": true + }, + "userTools": { + "type": "array", + "items": { + "type": "integer", + "format": "int32" + }, + "nullable": true + }, + "otherSkills": { + "type": "array", + "items": { + "type": "string" + }, + "nullable": true + }, + "otherInterests": { + "type": "array", + "items": { + "type": "string" + }, + "nullable": true + }, + "otherTools": { + "type": "array", + "items": { + "type": "string" + }, + "nullable": true + }, + "suitableAllAges": { + "type": "boolean", + "nullable": true + }, + "groupProject": { + "type": "boolean", + "nullable": true + }, + "projectFiltersOpen": { + "type": "boolean", + "nullable": true + }, + "volunteerRemotely": { + "type": "boolean", + "nullable": true + }, + "itemDonations": { + "type": "boolean", + "nullable": true + }, + "wheelchairAccessible": { + "type": "boolean", + "nullable": true + }, + "indoors": { + "type": "boolean", + "nullable": true + }, + "disasterReliefRegistrationSeen": { + "type": "boolean", + "nullable": true + }, + "donateToDisasterReliefChecked": { + "type": "boolean", + "nullable": true + }, + "volunteerForDisasterReliefChecked": { + "type": "boolean", + "nullable": true + }, + "disasterReliefAvailabilityDate": { + "type": "string", + "format": "date-time" + }, + "keywords": { + "type": "string", + "nullable": true + }, + "timePref": { + "type": "integer", + "format": "int32" + }, + "radiusType": { + "$ref": "#/components/schemas/JustServe.Contracts.Enums.DistanceType" + }, + "daysAvailable": { + "type": "array", + "items": { + "$ref": "#/components/schemas/System.DayOfWeek" + }, + "nullable": true + }, + "timesAvailable": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Enums.TimeOfDay" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Requests.UpsertProjectVolunteerHoursRequest": { + "type": "object", + "properties": { + "adminReportedHours": { + "type": "number", + "format": "double", + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Requests.VanityURLValidationModel": { + "required": [ + "value" + ], + "type": "object", + "properties": { + "value": { + "minLength": 1, + "type": "string" + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Requests.VolunteerManualModel": { + "type": "object", + "properties": { + "name": { + "type": "string", + "nullable": true + }, + "volunteerLanguage": { + "type": "string", + "nullable": true + }, + "groupSize": { + "type": "integer", + "format": "int32" + }, + "email": { + "type": "string", + "nullable": true + }, + "adminReportedHours": { + "type": "number", + "format": "double" + }, + "phone": { + "type": "string", + "nullable": true + }, + "volunteerComments": { + "type": "string", + "nullable": true + }, + "skills": { + "type": "array", + "items": { + "type": "integer", + "format": "int32" + }, + "nullable": true + }, + "volunteerRecurringDate": { + "type": "string", + "format": "date-time" + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Requests.VolunteerRecurringViewModel": { + "type": "object", + "properties": { + "skills": { + "type": "array", + "items": { + "type": "integer", + "format": "int32" + }, + "nullable": true + }, + "startTime": { + "type": "string", + "format": "date-time" + }, + "endTime": { + "type": "string", + "format": "date-time" + }, + "email": { + "type": "string", + "nullable": true + }, + "phone": { + "type": "string", + "nullable": true + }, + "groupSize": { + "type": "integer", + "format": "int32" + }, + "volunteerComments": { + "type": "string", + "nullable": true + }, + "schedule": { + "type": "string", + "nullable": true + }, + "dateInterested": { + "type": "string", + "format": "date-time", + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Requests.VolunteerViewModel": { + "type": "object", + "properties": { + "skills": { + "type": "array", + "items": { + "type": "integer", + "format": "int32" + }, + "nullable": true + }, + "dtl": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.DTLVolunteer" + }, + "nullable": true + }, + "email": { + "type": "string", + "nullable": true + }, + "phone": { + "type": "string", + "nullable": true + }, + "country": { + "type": "string", + "nullable": true + }, + "postal": { + "type": "string", + "nullable": true + }, + "city": { + "type": "string", + "nullable": true + }, + "removeExcludedShifts": { + "type": "boolean" + }, + "volunteerComments": { + "type": "string", + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Requests.WidgetProjectSearchModel": { + "type": "object", + "properties": { + "key": { + "type": "string", + "nullable": true + }, + "keywordSearch": { + "type": "string", + "nullable": true + }, + "locationSearch": { + "type": "string", + "nullable": true + }, + "latitude": { + "type": "number", + "format": "double" + }, + "longitude": { + "type": "number", + "format": "double" + }, + "locationSearchRadius": { + "type": "integer", + "format": "int32" + }, + "organizationId": { + "type": "string", + "nullable": true + }, + "stakeUnitId": { + "type": "string", + "nullable": true + }, + "includeOrgData": { + "type": "boolean" + }, + "page": { + "type": "integer", + "format": "int32" + }, + "size": { + "type": "integer", + "format": "int32" + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Requests.WidgetRequestModel": { + "type": "object", + "properties": { + "key": { + "type": "string", + "nullable": true + }, + "lastUpdatedDate": { + "type": "string", + "format": "date-time" + }, + "page": { + "type": "integer", + "format": "int32" + }, + "size": { + "type": "integer", + "format": "int32" + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Responses.AdminLiteInfo": { + "type": "object", + "properties": { + "userId": { + "type": "string", + "format": "uuid" + }, + "firstName": { + "type": "string", + "nullable": true + }, + "lastName": { + "type": "string", + "nullable": true + }, + "email": { + "type": "string", + "nullable": true + }, + "phone": { + "type": "string", + "nullable": true + }, + "displayCity": { + "type": "string", + "nullable": true + }, + "displayState": { + "type": "string", + "nullable": true + }, + "displayPostalCode": { + "type": "string", + "nullable": true + }, + "displayCountry": { + "type": "string", + "nullable": true + }, + "adminRoleId": { + "type": "integer", + "format": "int32" + }, + "adminLead": { + "type": "boolean" + }, + "adminBoundaryName": { + "type": "string", + "nullable": true + }, + "boundaryUnitId": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "orgId": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "orgName": { + "type": "string", + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Responses.AdminPendingProjectCounts": { + "type": "object", + "properties": { + "pendingProjectCounts": { + "type": "integer", + "format": "int32" + }, + "organizationPendingProjectCounts": { + "type": "integer", + "format": "int32" + }, + "totalPendingProjectCounts": { + "type": "integer", + "format": "int32" + }, + "subordinatesPendingProjectCounts": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.UserPendingProjectCounts" + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Responses.AttachmentInfo": { + "type": "object", + "properties": { + "id": { + "type": "string", + "nullable": true + }, + "mimeType": { + "type": "string", + "nullable": true + }, + "fileName": { + "type": "string", + "nullable": true + }, + "hostedFileLocation": { + "type": "string", + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Responses.AttachmentResult": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "fileName": { + "type": "string", + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Responses.AttachmentSlim": { + "type": "object", + "properties": { + "mimeType": { + "type": "string", + "nullable": true + }, + "fileName": { + "type": "string", + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Responses.BoolResult": { + "type": "object", + "properties": { + "result": { + "type": "boolean" + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Responses.BoundaryDataResponse": { + "type": "object", + "properties": { + "boundaryPermissionId": { + "type": "string", + "nullable": true + }, + "adminId": { + "type": "string", + "nullable": true + }, + "adminFirstName": { + "type": "string", + "nullable": true + }, + "adminLastName": { + "type": "string", + "nullable": true + }, + "boundaryName": { + "type": "string", + "nullable": true + }, + "justServeRepUserId": { + "type": "string", + "nullable": true + }, + "boundaryType": { + "$ref": "#/components/schemas/JustServe.Contracts.Enums.BoundaryType" + }, + "organizationType": { + "$ref": "#/components/schemas/JustServe.Contracts.Enums.OrganizationType" + }, + "roleId": { + "$ref": "#/components/schemas/JustServe.Contracts.Enums.Role" + }, + "isLead": { + "type": "boolean" + }, + "isVacant": { + "type": "boolean" + }, + "isParent": { + "type": "boolean" + }, + "displayChildren": { + "type": "boolean" + }, + "ldsGeographyId": { + "type": "string", + "nullable": true + }, + "geographyType": { + "$ref": "#/components/schemas/JustServe.Contracts.Enums.GeographyType" + }, + "organizationId": { + "type": "string", + "nullable": true + }, + "civicGeographies": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Authentication.CivicGeoBounded" + }, + "nullable": true + }, + "boundaryChildren": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.BoundaryDataResponse" + }, + "nullable": true + }, + "boundaryChildrenCount": { + "type": "integer", + "format": "int32" + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Responses.CalendarProjectResponse": { + "type": "object", + "properties": { + "projectId": { + "type": "string", + "nullable": true + }, + "projectName": { + "type": "string", + "nullable": true + }, + "locationAndDates": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.ProjectLocationDates" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Responses.CityCountsResponse": { + "type": "object", + "properties": { + "cityName": { + "type": "string", + "nullable": true + }, + "civicCityId": { + "type": "string", + "nullable": true + }, + "cityCount": { + "type": "integer", + "format": "int32" + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Responses.CivicChildResult": { + "type": "object", + "properties": { + "parentCivicId": { + "type": "string", + "format": "uuid" + }, + "civicId": { + "type": "string", + "format": "uuid" + }, + "name": { + "type": "string", + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Responses.CivicGeographyLimited": { + "type": "object", + "properties": { + "type": { + "$ref": "#/components/schemas/JustServe.Contracts.Enums.GeographyType" + }, + "manageable": { + "type": "boolean", + "nullable": true + }, + "id": { + "type": "string", + "nullable": true + }, + "country": { + "type": "string", + "nullable": true + }, + "countryCode": { + "type": "string", + "nullable": true + }, + "civicCountryId": { + "type": "string", + "nullable": true + }, + "state": { + "type": "string", + "nullable": true + }, + "civicStateId": { + "type": "string", + "nullable": true + }, + "county": { + "type": "string", + "nullable": true + }, + "civicCountyId": { + "type": "string", + "nullable": true + }, + "city": { + "type": "string", + "nullable": true + }, + "civicCityId": { + "type": "string", + "nullable": true + }, + "neighborhood": { + "type": "string", + "nullable": true + }, + "civicNeighborhoodId": { + "type": "string", + "nullable": true + }, + "zipcode": { + "type": "string", + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Responses.CountryCountsResponse": { + "type": "object", + "properties": { + "countryTranslatedName": { + "type": "string", + "nullable": true + }, + "civicCountryId": { + "type": "string", + "nullable": true + }, + "language": { + "type": "string", + "nullable": true + }, + "stateCounts": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.StateCountsResponse" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Responses.CountryStatePair": { + "type": "object", + "properties": { + "countryInfo": { + "$ref": "#/components/schemas/JustServe.Contracts.Geographies.CountryInfo" + }, + "country": { + "type": "string", + "nullable": true + }, + "state": { + "type": "string", + "nullable": true + }, + "county": { + "type": "string", + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Responses.CropedImageResponse": { + "type": "object", + "properties": { + "attachmentId": { + "type": "string", + "format": "uuid" + }, + "full": { + "type": "string", + "nullable": true + }, + "displayFilename": { + "type": "string", + "nullable": true + }, + "thumb": { + "type": "string", + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Responses.DynamicRoutingDataResponse": { + "type": "object", + "properties": { + "id": { + "type": "string", + "nullable": true + }, + "dynamicRouteType": { + "$ref": "#/components/schemas/JustServe.Contracts.Enums.DynamicRouteType" + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Responses.EndorsementOrgInfoSlim": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "nullable": true + }, + "endorsementStatus": { + "$ref": "#/components/schemas/JustServe.Contracts.Enums.EndorsementStatus" + }, + "updated": { + "type": "string", + "format": "date-time" + }, + "orgName": { + "type": "string", + "nullable": true + }, + "orgURL": { + "type": "string", + "nullable": true + }, + "orgInternalURL": { + "type": "string", + "nullable": true + }, + "orgLocation": { + "$ref": "#/components/schemas/JustServe.Contracts.Locations.Location" + }, + "logo": { + "type": "string", + "nullable": true + }, + "organizationType": { + "$ref": "#/components/schemas/JustServe.Contracts.Enums.OrganizationType" + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Responses.GeographyLimited": { + "type": "object", + "properties": { + "type": { + "$ref": "#/components/schemas/JustServe.Contracts.Enums.GeographyType" + }, + "manageable": { + "type": "boolean", + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Responses.HealthCheckResponse": { + "type": "object", + "properties": { + "assemblyVersion": { + "type": "string", + "nullable": true + }, + "environment": { + "type": "string", + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Responses.HomepageProjectInfo": { + "type": "object", + "additionalProperties": false + }, + "JustServe.Contracts.Responses.ImageUploadResponse": { + "type": "object", + "properties": { + "attachmentId": { + "type": "string", + "format": "uuid" + }, + "full": { + "type": "string", + "nullable": true + }, + "displayFilename": { + "type": "string", + "nullable": true + }, + "thumb": { + "type": "string", + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Responses.LDSGeographyLimited": { + "type": "object", + "properties": { + "type": { + "$ref": "#/components/schemas/JustServe.Contracts.Enums.GeographyType" + }, + "manageable": { + "type": "boolean", + "nullable": true + }, + "id": { + "type": "string", + "nullable": true + }, + "ldsGeographyId": { + "type": "string", + "nullable": true + }, + "unitId": { + "type": "string", + "nullable": true + }, + "name": { + "type": "string", + "nullable": true + }, + "areaId": { + "type": "string", + "nullable": true + }, + "missionId": { + "type": "string", + "nullable": true + }, + "ccId": { + "type": "string", + "nullable": true + }, + "stakeId": { + "type": "string", + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Responses.MSDynamicsFormattedUserV2": { + "type": "object", + "properties": { + "userId": { + "type": "string", + "nullable": true + }, + "email": { + "type": "string", + "nullable": true + }, + "firstName": { + "type": "string", + "nullable": true + }, + "lastName": { + "type": "string", + "nullable": true + }, + "emailWeeklyNewsletter": { + "type": "boolean", + "nullable": true + }, + "emailProjectSponsorUpdates": { + "type": "boolean", + "nullable": true + }, + "emailProjectVolunteerUpdates": { + "type": "boolean", + "nullable": true + }, + "emailDREffort": { + "type": "boolean", + "nullable": true + }, + "emailDRCauses": { + "type": "boolean", + "nullable": true + }, + "lastUpdated": { + "type": "string", + "nullable": true + }, + "state": { + "type": "string", + "nullable": true + }, + "postalCode": { + "type": "string", + "nullable": true + }, + "city": { + "type": "string", + "nullable": true + }, + "address": { + "type": "string", + "nullable": true + }, + "language": { + "type": "string", + "nullable": true + }, + "suitableAllAges": { + "type": "boolean", + "nullable": true + }, + "groupProject": { + "type": "boolean", + "nullable": true + }, + "volunteerRemotely": { + "type": "boolean", + "nullable": true + }, + "itemDonations": { + "type": "boolean", + "nullable": true + }, + "wheelchairAccessible": { + "type": "boolean", + "nullable": true + }, + "indoors": { + "type": "boolean", + "nullable": true + }, + "skills": { + "type": "array", + "items": { + "type": "string" + }, + "nullable": true + }, + "interests": { + "type": "array", + "items": { + "type": "string" + }, + "nullable": true + }, + "tools": { + "type": "array", + "items": { + "type": "string" + }, + "nullable": true + }, + "unsubscribeKey": { + "type": "string", + "nullable": true + }, + "deleted": { + "type": "boolean" + }, + "lastSignIn": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "generalMarketingOptin": { + "type": "boolean", + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Responses.MSDynamicsProjectResults": { + "type": "object", + "properties": { + "totalResults": { + "type": "integer", + "format": "int32" + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Responses.MSDynamicsUserResults": { + "type": "object", + "properties": { + "totalResults": { + "type": "integer", + "format": "int32" + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Responses.Mobile.DaysOfTheWeek": { + "type": "object", + "properties": { + "modified": { + "type": "string", + "format": "date-time" + }, + "ids": { + "type": "array", + "items": { + "type": "string" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Responses.Mobile.FAYTResponse": { + "type": "object", + "properties": { + "id": { + "type": "string", + "nullable": true + }, + "title": { + "type": "string", + "nullable": true + }, + "relativityScore": { + "type": "number", + "format": "double" + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Responses.Mobile.Favoriteorganizations": { + "type": "object", + "properties": { + "ids": { + "type": "array", + "items": { + "type": "string" + }, + "nullable": true + }, + "modified": { + "type": "string", + "format": "date-time" + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Responses.Mobile.Favoriteprojects": { + "type": "object", + "properties": { + "ids": { + "type": "array", + "items": { + "type": "string" + }, + "nullable": true + }, + "modified": { + "type": "string", + "format": "date-time" + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Responses.Mobile.IdandName": { + "type": "object", + "properties": { + "id": { + "type": "string", + "nullable": true + }, + "name": { + "type": "string", + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Responses.Mobile.Interests": { + "type": "object", + "properties": { + "modified": { + "type": "string", + "format": "date-time" + }, + "ids": { + "type": "array", + "items": { + "type": "string" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Responses.Mobile.MobileAttachment": { + "type": "object", + "properties": { + "locationURL": { + "type": "string", + "nullable": true + }, + "fileType": { + "type": "string", + "nullable": true + }, + "fileName": { + "type": "string", + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Responses.Mobile.MobileContact": { + "type": "object", + "properties": { + "name": { + "type": "string", + "nullable": true + }, + "phone": { + "type": "string", + "nullable": true + }, + "email": { + "type": "string", + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Responses.Mobile.MobileCountryNameInfo": { + "type": "object", + "properties": { + "usePostal": { + "type": "boolean" + }, + "countryName": { + "type": "string", + "nullable": true + }, + "countryCodeAlpha3": { + "type": "string", + "nullable": true + }, + "countryPhone": { + "type": "string", + "nullable": true + }, + "loginAge": { + "type": "string", + "nullable": true + }, + "inEuropeanUnion": { + "type": "boolean" + }, + "useMetricUnits": { + "type": "boolean" + }, + "twelveHourClock": { + "type": "boolean" + }, + "hideStateGeography": { + "type": "boolean" + }, + "hideCountyGeography": { + "type": "boolean" + }, + "houseNumAfterStreet": { + "type": "boolean" + }, + "states": { + "type": "array", + "items": { + "type": "string" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Responses.Mobile.MobileLocation": { + "type": "object", + "properties": { + "address": { + "type": "string", + "nullable": true + }, + "suite": { + "nullable": true + }, + "city": { + "type": "string", + "nullable": true + }, + "neighborhood": { + "nullable": true + }, + "county": { + "type": "string", + "nullable": true + }, + "state": { + "type": "string", + "nullable": true + }, + "postal": { + "type": "string", + "nullable": true + }, + "countryCodeAlpha3": { + "nullable": true + }, + "latitude": { + "type": "number", + "format": "double" + }, + "longitude": { + "type": "number", + "format": "double" + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Responses.Mobile.MobileLocationObject": { + "type": "object", + "properties": { + "id": { + "type": "string", + "nullable": true + }, + "startLocal": { + "type": "string", + "format": "date-time" + }, + "endLocal": { + "type": "string", + "format": "date-time" + }, + "start": { + "type": "string", + "format": "date-time" + }, + "end": { + "type": "string", + "format": "date-time" + }, + "projectType": { + "type": "string", + "nullable": true + }, + "isVolunteersCapped": { + "type": "boolean" + }, + "isGroupsCapped": { + "type": "boolean" + }, + "groupLimit": { + "type": "integer", + "format": "int32" + }, + "volunteerLimit": { + "type": "integer", + "format": "int32" + }, + "volunteersNeeded": { + "type": "integer", + "format": "int32" + }, + "locationName": { + "type": "string", + "nullable": true + }, + "volunteerResponsibilities": { + "type": "string", + "nullable": true + }, + "isVolunteered": { + "type": "boolean" + }, + "ongoingProjectScheduleInformation": { + "type": "string", + "nullable": true + }, + "ongoingAvailabilitySchedule": { + "type": "string", + "nullable": true + }, + "ongoingAvailabilityDate": { + "type": "string", + "nullable": true + }, + "eventContact": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.Mobile.MobileContact" + }, + "location": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.Mobile.MobileLocation" + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Responses.Mobile.MobileLocationSlim": { + "type": "object", + "properties": { + "modified": { + "type": "string", + "format": "date-time" + }, + "city": { + "type": "string", + "nullable": true + }, + "state": { + "type": "string", + "nullable": true + }, + "postalCode": { + "type": "string", + "nullable": true + }, + "countryCodeAlpha3": { + "type": "string", + "nullable": true + }, + "address": { + "type": "string", + "nullable": true + }, + "distanceUnits": { + "type": "string", + "nullable": true + }, + "clock": { + "type": "string", + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Responses.Mobile.MobileOptions": { + "type": "object", + "properties": { + "languages": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.LocaleNames" + }, + "nullable": true + }, + "skills": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.Mobile.SkillInfo" + }, + "nullable": true + }, + "interests": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.Mobile.IdandName" + }, + "nullable": true + }, + "countries": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.Mobile.MobileCountryNameInfo" + }, + "nullable": true + }, + "tools": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.Mobile.IdandName" + }, + "nullable": true + }, + "daysOfTheWeek": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.Mobile.IdandName" + }, + "nullable": true + }, + "timesOfDay": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.Mobile.IdandName" + }, + "nullable": true + }, + "radiusOptions": { + "type": "array", + "items": { + "type": "integer", + "format": "int32" + }, + "nullable": true + }, + "copyrightYear": { + "type": "string", + "nullable": true + }, + "privacyUpdateDate": { + "type": "string", + "format": "date-time" + }, + "privacyURL": { + "type": "string", + "nullable": true + }, + "termsUpdateDate": { + "type": "string", + "format": "date-time" + }, + "termsURL": { + "type": "string", + "nullable": true + }, + "aboutURL": { + "type": "string", + "nullable": true + }, + "successStoriesURL": { + "type": "string", + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Responses.Mobile.MobileOrg": { + "type": "object", + "properties": { + "id": { + "type": "string", + "nullable": true + }, + "language": { + "type": "string", + "nullable": true + }, + "organizationType": { + "type": "string", + "nullable": true + }, + "externalWebsiteUrl": { + "type": "string", + "nullable": true + }, + "justServeWebsiteUrl": { + "type": "string", + "nullable": true + }, + "logoUrl": { + "type": "string", + "nullable": true + }, + "bannerUrl": { + "type": "string", + "nullable": true + }, + "name": { + "type": "string", + "nullable": true + }, + "description": { + "type": "string", + "nullable": true + }, + "facebookUrl": { + "type": "string", + "nullable": true + }, + "googleUrl": { + "type": "string", + "nullable": true + }, + "twitterUrl": { + "type": "string", + "nullable": true + }, + "youTubeUrl": { + "type": "string", + "nullable": true + }, + "instagramUrl": { + "type": "string", + "nullable": true + }, + "linkedInUrl": { + "type": "string", + "nullable": true + }, + "owners": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.Mobile.MobileOwner" + }, + "nullable": true + }, + "contact": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.Mobile.MobileContact" + }, + "location": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.Mobile.MobileLocation" + }, + "upcomingProjects": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.Mobile.MobileUpcomingProject" + }, + "nullable": true + }, + "activeProjects": { + "type": "array", + "items": { + "type": "string" + }, + "nullable": true + }, + "projectsOwned": { + "type": "integer", + "format": "int32" + }, + "endorsedOrgsCount": { + "type": "integer", + "format": "int32" + }, + "updated": { + "type": "string", + "format": "date-time" + }, + "isFavorite": { + "type": "boolean" + }, + "announcementTitle": { + "type": "string", + "nullable": true + }, + "announcementImage": { + "type": "string", + "nullable": true + }, + "announcementDescription": { + "type": "string", + "nullable": true + }, + "announcementLink": { + "type": "string", + "nullable": true + }, + "relativityScore": { + "type": "number", + "format": "double" + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Responses.Mobile.MobileOrgSearchResponse": { + "type": "object", + "properties": { + "organizations": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.Mobile.MobileOrg" + }, + "nullable": true + }, + "totalElements": { + "type": "integer", + "format": "int32" + }, + "pageSize": { + "type": "integer", + "format": "int32" + }, + "firstPage": { + "type": "boolean" + }, + "lastPage": { + "type": "boolean" + }, + "totalPages": { + "type": "integer", + "format": "int32" + }, + "currentPage": { + "type": "integer", + "format": "int32" + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Responses.Mobile.MobileOwner": { + "type": "object", + "properties": { + "id": { + "type": "string", + "nullable": true + }, + "name": { + "type": "string", + "nullable": true + }, + "email": { + "type": "string", + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Responses.Mobile.MobileProject": { + "type": "object", + "properties": { + "id": { + "type": "string", + "nullable": true + }, + "projectStatus": { + "$ref": "#/components/schemas/JustServe.Contracts.Enums.ProjectStatus" + }, + "projectType": { + "type": "string", + "nullable": true + }, + "language": { + "type": "string", + "nullable": true + }, + "isActive": { + "type": "boolean" + }, + "updated": { + "type": "string", + "format": "date-time" + }, + "projectImage": { + "type": "string", + "nullable": true + }, + "title": { + "type": "string", + "nullable": true + }, + "description": { + "type": "string", + "nullable": true + }, + "longDescription": { + "type": "string", + "nullable": true + }, + "attachments": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.Mobile.MobileAttachment" + }, + "nullable": true + }, + "projectOptions": { + "$ref": "#/components/schemas/JustServe.Contracts.Requests.Mobile.ProjectOptions" + }, + "firstStartDate": { + "type": "string", + "format": "date-time" + }, + "lastEndDate": { + "type": "string", + "format": "date-time" + }, + "nextOpportunity": { + "type": "string", + "format": "date-time" + }, + "relatedSkills": { + "type": "array", + "items": { + "type": "string" + }, + "nullable": true + }, + "relatedInterests": { + "type": "array", + "items": { + "type": "string" + }, + "nullable": true + }, + "events": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.Mobile.MobileLocationObject" + }, + "nullable": true + }, + "organizationId": { + "type": "string", + "nullable": true + }, + "organizationName": { + "type": "string", + "nullable": true + }, + "orgDescription": { + "type": "string", + "nullable": true + }, + "orgExternalURL": { + "type": "string", + "nullable": true + }, + "orgURL": { + "type": "string", + "nullable": true + }, + "orgContactName": { + "type": "string", + "nullable": true + }, + "orgContactEmail": { + "type": "string", + "nullable": true + }, + "orgContactPhone": { + "type": "string", + "nullable": true + }, + "orgImageLogo": { + "type": "string", + "nullable": true + }, + "volunteerCenterId": { + "type": "string", + "nullable": true + }, + "volunteerCenterName": { + "type": "string", + "nullable": true + }, + "volunteerCenterLogo": { + "type": "string", + "nullable": true + }, + "projectCreated": { + "type": "string", + "format": "date-time" + }, + "isFavorite": { + "type": "boolean" + }, + "isVolunteered": { + "type": "boolean" + }, + "distanceScore": { + "type": "number", + "format": "double" + }, + "relativityScore": { + "type": "number", + "format": "double" + }, + "justServeWebsiteUrl": { + "type": "string", + "nullable": true + }, + "externalVolunteerURL": { + "type": "string", + "nullable": true + }, + "isExternalProject": { + "type": "boolean" + }, + "days": { + "type": "array", + "items": { + "type": "string" + }, + "nullable": true + }, + "times": { + "type": "array", + "items": { + "type": "string" + }, + "nullable": true + }, + "multipleTimes": { + "type": "boolean" + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Responses.Mobile.MobileProjectSearchResponse": { + "type": "object", + "properties": { + "projects": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.Mobile.MobileProject" + }, + "nullable": true + }, + "totalElements": { + "type": "integer", + "format": "int32" + }, + "totalElementsUnfiltered": { + "type": "integer", + "format": "int32" + }, + "pageSize": { + "type": "integer", + "format": "int32" + }, + "firstPage": { + "type": "boolean" + }, + "lastPage": { + "type": "boolean" + }, + "totalPages": { + "type": "integer", + "format": "int32" + }, + "currentPage": { + "type": "integer", + "format": "int32" + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Responses.Mobile.MobileUpcomingProject": { + "type": "object", + "properties": { + "id": { + "type": "string", + "nullable": true + }, + "title": { + "type": "string", + "nullable": true + }, + "description": { + "type": "string", + "nullable": true + }, + "projectImage": { + "type": "string", + "nullable": true + }, + "projectType": { + "type": "string", + "nullable": true + }, + "nextOpportunityVolunteersNeeded": { + "type": "integer", + "format": "int32" + }, + "nextOpportunityEventId": { + "type": "string", + "nullable": true + }, + "nextOpportunityStart": { + "type": "string", + "format": "date-time" + }, + "nextOpportunityEnd": { + "type": "string", + "format": "date-time" + }, + "nextOpportunityLocation": { + "$ref": "#/components/schemas/JustServe.Contracts.Locations.Location" + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Responses.Mobile.MobileUserResponseModel": { + "type": "object", + "properties": { + "statusCode": { + "type": "integer", + "format": "int32" + }, + "responseText": { + "type": "string", + "nullable": true + }, + "contentType": { + "type": "string", + "nullable": true + }, + "token": { + "$ref": "#/components/schemas/JustServe.Contracts.Authentication.Token" + }, + "user": { + "$ref": "#/components/schemas/JustServe.Contracts.Users.MobileUser" + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Responses.Mobile.Notificationsettings": { + "type": "object", + "properties": { + "modified": { + "type": "string", + "format": "date-time" + }, + "weeklyUpdates": { + "type": "boolean" + }, + "weeklyUpdatesRadius": { + "type": "integer", + "format": "int32" + }, + "statusEmails": { + "type": "boolean" + }, + "contactHelpDisasterRecovery": { + "type": "boolean" + }, + "contactDonateDisasterRelief": { + "type": "boolean" + }, + "notifyUpcomingVolunteeredProjects": { + "type": "boolean" + }, + "notifyUpcomingVolunteeredProjectsDaysPrior": { + "type": "integer", + "format": "int32" + }, + "notifyByMobilePhone": { + "type": "boolean" + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Responses.Mobile.Projectsearchpreferences": { + "type": "object", + "properties": { + "modified": { + "type": "string", + "format": "date-time" + }, + "suitableForAllAges": { + "type": "boolean" + }, + "groupProject": { + "type": "boolean" + }, + "projectFiltersOpen": { + "type": "boolean" + }, + "volunteerFromHome": { + "type": "boolean" + }, + "volunteerFromAnywhere": { + "type": "boolean" + }, + "itemDonations": { + "type": "boolean" + }, + "wheelchairAccessible": { + "type": "boolean" + }, + "indoors": { + "type": "boolean" + }, + "forYouthGroups": { + "type": "boolean" + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Responses.Mobile.SkillInfo": { + "type": "object", + "properties": { + "id": { + "type": "string", + "nullable": true + }, + "name": { + "type": "string", + "nullable": true + }, + "category": { + "type": "string", + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Responses.Mobile.Skills": { + "type": "object", + "properties": { + "modified": { + "type": "string", + "format": "date-time" + }, + "ids": { + "type": "array", + "items": { + "type": "string" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Responses.Mobile.TimesOfDay": { + "type": "object", + "properties": { + "modified": { + "type": "string", + "format": "date-time" + }, + "ids": { + "type": "array", + "items": { + "type": "string" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Responses.Mobile.Tools": { + "type": "object", + "properties": { + "modified": { + "type": "string", + "format": "date-time" + }, + "ids": { + "type": "array", + "items": { + "type": "string" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Responses.Name": { + "type": "object", + "properties": { + "userId": { + "type": "string", + "nullable": true + }, + "firstName": { + "type": "string", + "nullable": true + }, + "lastName": { + "type": "string", + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Responses.OnGoingSlim": { + "type": "object", + "properties": { + "id": { + "type": "string", + "nullable": true + }, + "start": { + "type": "string", + "format": "date-time" + }, + "end": { + "type": "string", + "format": "date-time" + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Responses.OrganizationLite": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "name": { + "type": "string", + "nullable": true + }, + "logo": { + "type": "string", + "nullable": true + }, + "description": { + "type": "string", + "nullable": true + }, + "contactName": { + "type": "string", + "nullable": true + }, + "contactPhone": { + "type": "string", + "nullable": true + }, + "contactEmail": { + "type": "string", + "nullable": true + }, + "url": { + "type": "string", + "nullable": true + }, + "ownerUserId": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "ownerUserName": { + "type": "string", + "nullable": true + }, + "leadAdminUserId": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "leadAdminUserName": { + "type": "string", + "nullable": true + }, + "location": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.OrganizationLocationLite" + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Responses.OrganizationLocationLite": { + "type": "object", + "properties": { + "displayAddress": { + "type": "string", + "nullable": true + }, + "displayAddress2": { + "type": "string", + "nullable": true + }, + "city": { + "type": "string", + "nullable": true + }, + "state": { + "type": "string", + "nullable": true + }, + "zipCode": { + "type": "string", + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Responses.OrganizationResult": { + "type": "object", + "properties": { + "id": { + "type": "string", + "nullable": true + }, + "organizationOwners": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.UserSlim" + }, + "nullable": true + }, + "organizationType": { + "$ref": "#/components/schemas/JustServe.Contracts.Enums.OrganizationType" + }, + "language": { + "type": "string", + "nullable": true + }, + "name": { + "type": "string", + "nullable": true + }, + "description": { + "type": "string", + "nullable": true + }, + "website": { + "type": "string", + "nullable": true + }, + "url": { + "type": "string", + "nullable": true + }, + "location": { + "$ref": "#/components/schemas/JustServe.Contracts.Locations.Location" + }, + "logo": { + "type": "string", + "nullable": true + }, + "banner": { + "type": "string", + "nullable": true + }, + "facebookPath": { + "type": "string", + "nullable": true + }, + "googlePath": { + "type": "string", + "nullable": true + }, + "twitterPath": { + "type": "string", + "nullable": true + }, + "youTubePath": { + "type": "string", + "nullable": true + }, + "instagramPath": { + "type": "string", + "nullable": true + }, + "linkedInPath": { + "type": "string", + "nullable": true + }, + "contactName": { + "type": "string", + "nullable": true + }, + "contactPhone": { + "type": "string", + "nullable": true + }, + "contactEmail": { + "type": "string", + "nullable": true + }, + "linkedProjects": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.ProjectSlim" + }, + "nullable": true + }, + "projectsOwned": { + "type": "integer", + "format": "int32" + }, + "endorsedOrgsCount": { + "type": "integer", + "format": "int32" + }, + "orgIds": { + "type": "array", + "items": { + "type": "string" + }, + "nullable": true + }, + "associatedProjectIds": { + "type": "array", + "items": { + "type": "string" + }, + "nullable": true + }, + "created": { + "type": "string", + "format": "date-time" + }, + "updated": { + "type": "string", + "format": "date-time" + }, + "createdBy": { + "type": "string", + "nullable": true + }, + "updatedBy": { + "type": "string", + "nullable": true + }, + "distanceScore": { + "type": "number", + "format": "double" + }, + "relativityScore": { + "type": "number", + "format": "double" + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Responses.OrganizationSearchResponse": { + "type": "object", + "properties": { + "count": { + "type": "integer", + "format": "int32" + }, + "organizations": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.OrganizationResult" + }, + "nullable": true + }, + "location": { + "$ref": "#/components/schemas/JustServe.Contracts.Locations.LocationRad" + }, + "isLocationSupported": { + "type": "boolean" + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Responses.OrganizationSearchResults": { + "type": "object", + "properties": { + "count": { + "type": "integer", + "format": "int32", + "readOnly": true + }, + "organizationList": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.OrganizationResult" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Responses.OrganizationSlim": { + "type": "object", + "properties": { + "id": { + "type": "string", + "nullable": true + }, + "organizationType": { + "$ref": "#/components/schemas/JustServe.Contracts.Enums.OrganizationType" + }, + "title": { + "type": "string", + "nullable": true + }, + "logo": { + "type": "string", + "nullable": true + }, + "url": { + "type": "string", + "nullable": true + }, + "internalURL": { + "type": "string", + "nullable": true + }, + "website": { + "type": "string", + "nullable": true + }, + "description": { + "type": "string", + "nullable": true + }, + "contactName": { + "type": "string", + "nullable": true + }, + "contactPhone": { + "type": "string", + "nullable": true + }, + "contactEmail": { + "type": "string", + "nullable": true + }, + "isIndividualProject": { + "type": "boolean" + }, + "status": { + "$ref": "#/components/schemas/JustServe.Contracts.Enums.OrganizationStatus" + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Responses.Personalsettings": { + "type": "object", + "properties": { + "modified": { + "type": "string", + "format": "date-time" + }, + "username": { + "type": "string", + "nullable": true + }, + "firstName": { + "type": "string", + "nullable": true + }, + "lastName": { + "type": "string", + "nullable": true + }, + "email": { + "type": "string", + "nullable": true + }, + "phone": { + "type": "string", + "nullable": true + }, + "language": { + "type": "string", + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Responses.PrivacyTermsDates": { + "type": "object", + "properties": { + "privacyDate": { + "type": "string", + "nullable": true + }, + "termsDate": { + "type": "string", + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Responses.ProjectAdmin": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "status": { + "$ref": "#/components/schemas/JustServe.Contracts.Enums.ProjectStatus" + }, + "projectType": { + "$ref": "#/components/schemas/JustServe.Contracts.Enums.ProjectType" + }, + "title": { + "type": "string", + "nullable": true + }, + "parsedLocation": { + "type": "string", + "nullable": true + }, + "longDescription": { + "type": "string", + "nullable": true + }, + "isExpiredProject": { + "type": "boolean" + }, + "isUnlistedProject": { + "type": "boolean" + }, + "startDate": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "endDate": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "signupType": { + "$ref": "#/components/schemas/JustServe.Contracts.Enums.ProjectSignupType" + }, + "locationType": { + "$ref": "#/components/schemas/JustServe.Contracts.Enums.ProjectLocationType" + }, + "submitterId": { + "type": "string", + "format": "uuid" + }, + "submitterName": { + "type": "string", + "nullable": true + }, + "submitterEmail": { + "type": "string", + "nullable": true + }, + "ownerId": { + "type": "string", + "format": "uuid" + }, + "ownerName": { + "type": "string", + "nullable": true + }, + "ownerEmail": { + "type": "string", + "nullable": true + }, + "sponsorId": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "sponsorName": { + "type": "string", + "nullable": true + }, + "sponsorEmail": { + "type": "string", + "nullable": true + }, + "organizationId": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "organizationName": { + "type": "string", + "nullable": true + }, + "organizationUrl": { + "type": "string", + "nullable": true + }, + "ownerLog": { + "type": "string", + "nullable": true + }, + "timeType": { + "$ref": "#/components/schemas/JustServe.Contracts.Enums.ProjectTimeType" + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Responses.ProjectAttributes": { + "type": "object", + "properties": { + "suitableForAllAges": { + "type": "boolean" + }, + "groupProject": { + "type": "boolean" + }, + "itemDonations": { + "type": "boolean" + }, + "wheelchairAccessible": { + "type": "boolean" + }, + "indoors": { + "type": "boolean" + }, + "forYouthGroups": { + "type": "boolean" + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Responses.ProjectBasicInformation": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "typeId": { + "type": "integer", + "format": "int32" + }, + "title": { + "type": "string", + "nullable": true + }, + "startDateTimeOffset": { + "type": "string", + "format": "date-time" + }, + "endDateTimeOffset": { + "type": "string", + "format": "date-time" + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Responses.ProjectCard": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "statusId": { + "type": "integer", + "format": "int32" + }, + "projectTypeId": { + "type": "integer", + "format": "int32" + }, + "title": { + "type": "string", + "nullable": true + }, + "shortDescription": { + "type": "string", + "nullable": true + }, + "imagePath": { + "type": "string", + "nullable": true + }, + "organizationName": { + "type": "string", + "nullable": true + }, + "suitableAllAges": { + "type": "boolean" + }, + "groupProjects": { + "type": "boolean" + }, + "volunteerRemotely": { + "type": "boolean" + }, + "volunteerFromAnywhere": { + "type": "boolean" + }, + "itemDonations": { + "type": "boolean" + }, + "wheelchairAccessible": { + "type": "boolean" + }, + "indoors": { + "type": "boolean" + }, + "forYouthGroups": { + "type": "boolean" + }, + "totalNextOpportunities": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "regionSelected": { + "type": "boolean" + }, + "nextOpportunity": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.ProjectCardOpportunity" + }, + "location": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.ProjectCardLocation" + }, + "countryCode": { + "type": "string", + "nullable": true + }, + "boundaries": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Projects.RegionCivicGeography" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Responses.ProjectCardLocation": { + "type": "object", + "properties": { + "city": { + "type": "string", + "nullable": true + }, + "state": { + "type": "string", + "nullable": true + }, + "postal": { + "type": "string", + "nullable": true + }, + "latitude": { + "type": "number", + "format": "double" + }, + "longitude": { + "type": "number", + "format": "double" + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Responses.ProjectCardOpportunity": { + "type": "object", + "properties": { + "projectEventId": { + "type": "string", + "format": "uuid" + }, + "start": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "end": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "volunteersNeeded": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "timezone": { + "type": "string", + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Responses.ProjectDate": { + "type": "object", + "properties": { + "dtlId": { + "type": "string", + "nullable": true + }, + "timeSlotId": { + "type": "string", + "nullable": true + }, + "ongoingId": { + "type": "string", + "nullable": true + }, + "volunteeredRecurrenceId": { + "type": "string", + "nullable": true + }, + "recurringTimeId": { + "type": "string", + "nullable": true + }, + "startDate": { + "type": "string", + "format": "date-time" + }, + "endDate": { + "type": "string", + "format": "date-time" + }, + "needed": { + "type": "integer", + "format": "int32" + }, + "volunteered": { + "type": "integer", + "format": "int32" + }, + "totalVolunteersNeeded": { + "type": "integer", + "format": "int32" + }, + "groupLimit": { + "type": "integer", + "format": "int32" + }, + "eventCapReached": { + "type": "boolean" + }, + "volunteerResponsibilities": { + "type": "string", + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Responses.ProjectEventCustom": { + "type": "object", + "properties": { + "projectEventId": { + "type": "string", + "format": "uuid" + }, + "projectEventStartDateTime": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "projectEventStartDateTimeOffset": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "projectEventTimeString": { + "type": "string", + "nullable": true + }, + "volunteerResponsibility": { + "type": "string", + "nullable": true + }, + "projectEventStatus": { + "type": "integer", + "format": "int32" + }, + "currentVolunteers": { + "type": "integer", + "format": "int32" + }, + "totalVolunteersNeeded": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "volunteerCap": { + "type": "boolean" + }, + "groupLimit": { + "type": "integer", + "format": "int32" + }, + "groupCap": { + "type": "boolean" + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Responses.ProjectFiltersTranslation": { + "type": "object", + "properties": { + "language": { + "type": "string", + "nullable": true + }, + "skills": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.keyvalue" + }, + "nullable": true + }, + "interests": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.keyvalue" + }, + "nullable": true + }, + "tools": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.keyvalue" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Responses.ProjectLocationDates": { + "type": "object", + "properties": { + "location": { + "$ref": "#/components/schemas/JustServe.Contracts.Locations.Location" + }, + "projectDates": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.ProjectDate" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Responses.ProjectPreview": { + "type": "object", + "properties": { + "id": { + "type": "string", + "nullable": true + }, + "title": { + "type": "string", + "nullable": true + }, + "imagePath": { + "type": "string", + "nullable": true + }, + "description": { + "type": "string", + "nullable": true + }, + "start": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "end": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "ongoing": { + "type": "boolean" + }, + "remote": { + "type": "boolean" + }, + "location": { + "$ref": "#/components/schemas/JustServe.Contracts.Locations.Location" + }, + "boundaries": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Projects.RegionCivicGeography" + }, + "nullable": true + }, + "volunteersNeeded": { + "type": "integer", + "format": "int32" + }, + "multipleTimes": { + "type": "boolean" + }, + "organizationName": { + "type": "string", + "nullable": true + }, + "organizationURL": { + "type": "string", + "nullable": true + }, + "isSponsor": { + "type": "boolean" + }, + "underReview": { + "type": "boolean" + }, + "projectAttributes": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.ProjectAttributes" + }, + "projectType": { + "$ref": "#/components/schemas/JustServe.Contracts.Enums.ProjectType" + }, + "dtlId": { + "type": "string", + "nullable": true + }, + "timeSlotId": { + "type": "string", + "nullable": true + }, + "ongoingId": { + "type": "string", + "nullable": true + }, + "volunteeredRecurrenceId": { + "type": "string", + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Responses.ProjectResponse": { + "type": "object", + "properties": { + "id": { + "type": "string", + "nullable": true + }, + "projectType": { + "$ref": "#/components/schemas/JustServe.Contracts.Enums.ProjectType" + }, + "status": { + "$ref": "#/components/schemas/JustServe.Contracts.Enums.ProjectStatus" + }, + "title": { + "type": "string", + "nullable": true + }, + "imagePath": { + "type": "string", + "nullable": true + }, + "created": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "start": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "startFormatted": { + "type": "string", + "format": "date-time" + }, + "end": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "endFormatted": { + "type": "string", + "format": "date-time" + }, + "nextOpportunityEventId": { + "type": "string", + "nullable": true + }, + "nextOpportunityStart": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "nextOpportunityEnd": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "timeSlots": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.TimeSlotSlim" + }, + "nullable": true + }, + "onGoing": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.OnGoingSlim" + }, + "nullable": true + }, + "adminInfo": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Projects.AdminInfo" + }, + "nullable": true + }, + "shortDescription": { + "type": "string", + "nullable": true + }, + "distanceScore": { + "type": "number", + "format": "double" + }, + "relativityScore": { + "type": "number", + "format": "double" + }, + "location": { + "$ref": "#/components/schemas/JustServe.Contracts.Locations.LocationRad" + }, + "locations": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Locations.LocationRad" + }, + "nullable": true + }, + "multipleLocations": { + "type": "boolean" + }, + "multipleTimes": { + "type": "boolean" + }, + "ongoing": { + "type": "boolean" + }, + "remote": { + "type": "boolean" + }, + "linkedOrganization": { + "type": "string", + "nullable": true + }, + "organizationName": { + "type": "string", + "nullable": true + }, + "organizationURL": { + "type": "string", + "nullable": true + }, + "organizationExternalURL": { + "type": "string", + "nullable": true + }, + "organizationLogo": { + "type": "string", + "nullable": true + }, + "language": { + "type": "string", + "nullable": true + }, + "isActive": { + "type": "boolean" + }, + "isIndividualProject": { + "type": "boolean" + }, + "isDirectlyOwnedOrSponsored": { + "type": "boolean" + }, + "isOwnedOrRepresentedViaOrganization": { + "type": "boolean" + }, + "updated": { + "type": "string", + "format": "date-time" + }, + "projectOwnerName": { + "type": "string", + "nullable": true + }, + "projectOwnerUserId": { + "type": "string", + "nullable": true + }, + "volunteerFromAnywhere": { + "type": "boolean" + }, + "volunteersNeeded": { + "type": "integer", + "format": "int32" + }, + "underReview": { + "type": "boolean" + }, + "projectAttributes": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.ProjectAttributes" + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Responses.ProjectSearchResponse": { + "type": "object", + "properties": { + "count": { + "type": "integer", + "format": "int32" + }, + "projects": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.ProjectResponse" + }, + "nullable": true + }, + "searchLatitude": { + "type": "number", + "format": "double" + }, + "searchLongitude": { + "type": "number", + "format": "double" + }, + "location": { + "$ref": "#/components/schemas/JustServe.Contracts.Locations.LocationRad" + }, + "isLocationSupported": { + "type": "boolean" + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Responses.ProjectSlim": { + "type": "object", + "properties": { + "id": { + "type": "string", + "nullable": true + }, + "title": { + "type": "string", + "nullable": true + }, + "description": { + "type": "string", + "nullable": true + }, + "projectExpired": { + "type": "boolean" + }, + "orgAuthorizationPending": { + "type": "boolean", + "nullable": true + }, + "status": { + "$ref": "#/components/schemas/JustServe.Contracts.Enums.ProjectStatus" + }, + "startDate": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "endDate": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "locations": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Locations.Location" + }, + "nullable": true + }, + "lastChangeReason": { + "type": "string", + "nullable": true + }, + "needsAttention": { + "type": "boolean", + "nullable": true + }, + "isActive": { + "type": "boolean", + "nullable": true + }, + "isUnlistedProject": { + "type": "boolean" + }, + "isDirectlyOwnedOrSponsored": { + "type": "boolean" + }, + "isOwnedOrRepresentedViaOrganization": { + "type": "boolean" + }, + "isIndividualProject": { + "type": "boolean" + }, + "projectOwnerName": { + "type": "string", + "nullable": true + }, + "projectOwnerUserId": { + "type": "string", + "nullable": true + }, + "relativityScore": { + "type": "number", + "format": "double" + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Responses.ProjectTiny": { + "type": "object", + "properties": { + "projectId": { + "type": "string", + "format": "uuid" + }, + "skillIds": { + "type": "array", + "items": { + "type": "integer", + "format": "int32" + }, + "nullable": true + }, + "interestIds": { + "type": "array", + "items": { + "type": "integer", + "format": "int32" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Responses.ProjectVolunteerHeader": { + "type": "object", + "properties": { + "shiftTitle": { + "type": "string", + "nullable": true + }, + "id": { + "type": "string", + "nullable": true + }, + "dtlId": { + "type": "string", + "nullable": true + }, + "time": { + "type": "string", + "nullable": true + }, + "timeFormatted": { + "type": "string", + "format": "date-time" + }, + "volunteersTotal": { + "type": "integer", + "format": "int32" + }, + "volunteersNeeded": { + "type": "integer", + "format": "int32" + }, + "location": { + "$ref": "#/components/schemas/JustServe.Contracts.Locations.Location" + }, + "volunteers": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.VolunteerDetails" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Responses.ProjectVolunteersInterested": { + "type": "object", + "properties": { + "projectId": { + "type": "string", + "nullable": true + }, + "title": { + "type": "string", + "nullable": true + }, + "groupProject": { + "type": "boolean" + }, + "isOngoing": { + "type": "boolean" + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.ProjectVolunteerHeader" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Responses.ProjectsAndIdList": { + "type": "object", + "properties": { + "count": { + "type": "integer", + "format": "int32" + }, + "ids": { + "type": "array", + "items": { + "type": "string" + }, + "nullable": true + }, + "projects": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.ProjectResponse" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Responses.ProjectsSlimSearchResults": { + "type": "object", + "properties": { + "count": { + "type": "integer", + "format": "int32" + }, + "user": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.UserSlim" + }, + "projects": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.ProjectSlim" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Responses.ProjectsView": { + "type": "object", + "properties": { + "name": { + "type": "string", + "nullable": true + }, + "id": { + "type": "string", + "nullable": true + }, + "logo": { + "type": "string", + "nullable": true + }, + "url": { + "type": "string", + "nullable": true + }, + "totalProjectCount": { + "type": "integer", + "format": "int32" + }, + "projects": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.ProjectResponse" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Responses.QuickSearchTitle": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "title": { + "type": "string", + "nullable": true + }, + "created": { + "type": "string", + "format": "date-time" + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Responses.ReportableProjectSub": { + "type": "object", + "properties": { + "id": { + "type": "string", + "nullable": true + }, + "onGoing": { + "type": "boolean" + }, + "date": { + "type": "string", + "format": "date-time" + }, + "hours": { + "type": "number", + "format": "double" + }, + "timeSlotId": { + "type": "string", + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Responses.ReportedHours": { + "type": "object", + "properties": { + "projectId": { + "type": "string", + "nullable": true + }, + "logo": { + "type": "string", + "nullable": true + }, + "sub": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.ReportableProjectSub" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Responses.SearchResponseObject": { + "type": "object", + "properties": { + "id": { + "type": "string", + "nullable": true + }, + "customField": { + "type": "string", + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Responses.SearchResponseWithRelativityScore": { + "type": "object", + "properties": { + "id": { + "type": "string", + "nullable": true + }, + "customField": { + "type": "string", + "nullable": true + }, + "relativityScore": { + "type": "number", + "format": "double" + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Responses.StateCountsResponse": { + "type": "object", + "properties": { + "stateName": { + "type": "string", + "nullable": true + }, + "civicStateId": { + "type": "string", + "nullable": true + }, + "cityCounts": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.CityCountsResponse" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Responses.StoryLimited": { + "type": "object", + "properties": { + "id": { + "type": "string", + "nullable": true + }, + "projectId": { + "type": "string", + "nullable": true + }, + "language": { + "type": "string", + "nullable": true + }, + "title": { + "type": "string", + "nullable": true + }, + "introduction": { + "type": "string", + "nullable": true + }, + "body": { + "type": "string", + "nullable": true + }, + "location": { + "$ref": "#/components/schemas/JustServe.Contracts.Locations.LocationRad" + }, + "relativityScore": { + "type": "number", + "format": "double" + }, + "image": { + "$ref": "#/components/schemas/JustServe.Contracts.ImagePairDetails" + }, + "videoURL": { + "type": "string", + "nullable": true + }, + "updated": { + "type": "string", + "format": "date-time" + }, + "created": { + "type": "string", + "format": "date-time" + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Responses.StoryMinimal": { + "type": "object", + "properties": { + "id": { + "type": "string", + "nullable": true + }, + "title": { + "type": "string", + "nullable": true + }, + "projectTitle": { + "type": "string", + "nullable": true + }, + "projectId": { + "type": "string", + "nullable": true + }, + "projectExpired": { + "type": "boolean" + }, + "posted": { + "type": "string", + "format": "date-time" + }, + "ownerId": { + "type": "string", + "nullable": true + }, + "ownerName": { + "type": "string", + "nullable": true + }, + "projectIsActive": { + "type": "boolean" + }, + "relativityScore": { + "type": "number", + "format": "double" + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Responses.StorySearchResults": { + "type": "object", + "properties": { + "count": { + "type": "integer", + "format": "int32" + }, + "stories": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.StoryMinimal" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Responses.SuggestionResponse": { + "type": "object", + "properties": { + "location": { + "type": "string", + "nullable": true + }, + "locationData": { + "$ref": "#/components/schemas/JustServe.Contracts.Locations.LocationRad" + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Responses.TimeSlotSlim": { + "type": "object", + "properties": { + "id": { + "type": "string", + "nullable": true + }, + "start": { + "type": "string", + "format": "date-time" + }, + "startFormatted": { + "type": "string", + "format": "date-time" + }, + "end": { + "type": "string", + "format": "date-time" + }, + "endFormatted": { + "type": "string", + "format": "date-time" + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Responses.UpdatedBy": { + "type": "object", + "properties": { + "name": { + "type": "string", + "nullable": true + }, + "boundaryName": { + "type": "string", + "nullable": true + }, + "role": { + "$ref": "#/components/schemas/JustServe.Contracts.Enums.Role" + }, + "isLead": { + "type": "boolean" + }, + "updatedDate": { + "type": "string", + "format": "date-time" + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Responses.UserLocationCheckResponse": { + "type": "object", + "properties": { + "internationalCivicAdmin": { + "type": "boolean" + }, + "internationalLDSAdmin": { + "type": "boolean" + }, + "internationalAdmin": { + "type": "boolean" + }, + "usaCivicAdmin": { + "type": "boolean" + }, + "usaldsAdmin": { + "type": "boolean" + }, + "usaAdmin": { + "type": "boolean" + }, + "utahLDSAdmin": { + "type": "boolean" + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Responses.UserNewsletter": { + "type": "object", + "properties": { + "userId": { + "type": "string", + "format": "uuid" + }, + "volunteerNewsletter": { + "type": "boolean" + }, + "username": { + "type": "string", + "nullable": true + }, + "email": { + "type": "string", + "nullable": true + }, + "firstName": { + "type": "string", + "nullable": true + }, + "lastName": { + "type": "string", + "nullable": true + }, + "longitude": { + "type": "number", + "format": "double" + }, + "latitude": { + "type": "number", + "format": "double" + }, + "interests": { + "type": "array", + "items": { + "type": "integer", + "format": "int32" + }, + "nullable": true + }, + "skills": { + "type": "array", + "items": { + "type": "integer", + "format": "int32" + }, + "nullable": true + }, + "tools": { + "type": "array", + "items": { + "type": "integer", + "format": "int32" + }, + "nullable": true + }, + "isDeleted": { + "type": "boolean" + }, + "locale": { + "type": "string", + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Responses.UserPendingProject": { + "type": "object", + "properties": { + "projectId": { + "type": "string", + "format": "uuid" + }, + "projectTitle": { + "type": "string", + "nullable": true + }, + "projectLocation": { + "type": "string", + "nullable": true + }, + "projectSubmittedDate": { + "type": "string", + "format": "date-time" + }, + "projectHoursSinceSubmitted": { + "type": "integer", + "format": "int32" + }, + "projectOwnerId": { + "type": "string", + "format": "uuid" + }, + "projectOwnerName": { + "type": "string", + "nullable": true + }, + "projectSubmitterId": { + "type": "string", + "format": "uuid" + }, + "projectSubmitterName": { + "type": "string", + "nullable": true + }, + "projectSignupType": { + "$ref": "#/components/schemas/JustServe.Contracts.Enums.ProjectSignupType" + }, + "projectType": { + "$ref": "#/components/schemas/JustServe.Contracts.Enums.ProjectType" + }, + "projectLocationType": { + "$ref": "#/components/schemas/JustServe.Contracts.Enums.ProjectLocationType" + }, + "projectMultipleTimes": { + "type": "boolean", + "nullable": true + }, + "projectExternalRedirect": { + "type": "boolean" + }, + "projectOwnerLog": { + "type": "string", + "nullable": true + }, + "unlisted": { + "type": "boolean" + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Responses.UserPendingProjectCounts": { + "type": "object", + "properties": { + "pendingProjectCounts": { + "type": "integer", + "format": "int32" + }, + "organizationPendingProjectCounts": { + "type": "integer", + "format": "int32" + }, + "totalPendingProjectCounts": { + "type": "integer", + "format": "int32" + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Responses.UserResult": { + "type": "object", + "properties": { + "id": { + "type": "string", + "nullable": true + }, + "firstName": { + "type": "string", + "nullable": true + }, + "lastName": { + "type": "string", + "nullable": true + }, + "userName": { + "type": "string", + "nullable": true + }, + "language": { + "type": "string", + "nullable": true + }, + "address": { + "type": "string", + "nullable": true + }, + "city": { + "type": "string", + "nullable": true + }, + "state": { + "type": "string", + "nullable": true + }, + "postal": { + "type": "string", + "nullable": true + }, + "country": { + "type": "string", + "nullable": true + }, + "countryCode": { + "type": "string", + "nullable": true + }, + "countryCode2Char": { + "type": "string", + "nullable": true + }, + "stakeUnitNumber": { + "type": "string", + "nullable": true + }, + "areaUnitNumber": { + "type": "string", + "nullable": true + }, + "areaName": { + "type": "string", + "nullable": true + }, + "areaGeographyId": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "isActive": { + "type": "boolean" + }, + "trainedDate": { + "type": "string", + "format": "date-time" + }, + "email": { + "type": "string", + "nullable": true + }, + "phone": { + "type": "string", + "nullable": true + }, + "keywords": { + "type": "string", + "nullable": true + }, + "interests": { + "type": "array", + "items": { + "type": "string" + }, + "nullable": true + }, + "skills": { + "type": "array", + "items": { + "type": "string" + }, + "nullable": true + }, + "tools": { + "type": "array", + "items": { + "type": "string" + }, + "nullable": true + }, + "userSkills": { + "type": "array", + "items": { + "type": "integer", + "format": "int32" + }, + "nullable": true + }, + "userInterests": { + "type": "array", + "items": { + "type": "integer", + "format": "int32" + }, + "nullable": true + }, + "userTools": { + "type": "array", + "items": { + "type": "integer", + "format": "int32" + }, + "nullable": true + }, + "otherSkills": { + "type": "array", + "items": { + "type": "string" + }, + "nullable": true + }, + "otherInterests": { + "type": "array", + "items": { + "type": "string" + }, + "nullable": true + }, + "otherTools": { + "type": "array", + "items": { + "type": "string" + }, + "nullable": true + }, + "suitableAllAges": { + "type": "boolean" + }, + "groupProject": { + "type": "boolean" + }, + "projectFiltersOpen": { + "type": "boolean" + }, + "volunteerRemotely": { + "type": "boolean" + }, + "itemDonations": { + "type": "boolean" + }, + "wheelchairAccessible": { + "type": "boolean" + }, + "indoors": { + "type": "boolean" + }, + "forYouthGroups": { + "type": "boolean" + }, + "sponsorRole": { + "type": "boolean" + }, + "timePref": { + "type": "integer", + "format": "int32" + }, + "permissions": { + "type": "array", + "items": { + "type": "string" + }, + "nullable": true + }, + "permissionsText": { + "type": "string", + "nullable": true + }, + "isAdmin": { + "type": "boolean" + }, + "isSuperAdmin": { + "type": "boolean" + }, + "assignedLDSAreas": { + "type": "array", + "items": { + "type": "string" + }, + "nullable": true + }, + "generalEmailOptIn": { + "type": "boolean" + }, + "generalMarketingOptIn": { + "type": "boolean", + "nullable": true + }, + "volunteerNewsletter": { + "type": "boolean" + }, + "includeSponsorAdminInfo": { + "type": "boolean" + }, + "volunteerNewsletterRadius": { + "type": "integer", + "format": "int32" + }, + "radiusType": { + "type": "integer", + "format": "int32" + }, + "adminNewsletter": { + "type": "boolean" + }, + "viewedWhatsNew": { + "type": "boolean" + }, + "favoriteProjects": { + "type": "array", + "items": { + "type": "string" + }, + "nullable": true + }, + "favoriteOrganizations": { + "type": "array", + "items": { + "type": "string" + }, + "nullable": true + }, + "volunteeredProjects": { + "type": "array", + "items": { + "type": "string" + }, + "nullable": true + }, + "volunteeredTimeSlots": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.ProjectResponse" + }, + "nullable": true + }, + "reportedHours": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.ReportedHours" + }, + "nullable": true + }, + "ownsDrafts": { + "type": "integer", + "format": "int32" + }, + "ownsProjects": { + "type": "integer", + "format": "int32" + }, + "disasterReliefRegistrationSeen": { + "type": "boolean", + "nullable": true + }, + "donateToDisasterReliefChecked": { + "type": "boolean", + "nullable": true + }, + "volunteerForDisasterReliefChecked": { + "type": "boolean", + "nullable": true + }, + "daysAvailable": { + "type": "array", + "items": { + "$ref": "#/components/schemas/System.DayOfWeek" + }, + "nullable": true + }, + "timesAvailable": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Enums.TimeOfDay" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Responses.UserResultBounded": { + "type": "object", + "properties": { + "id": { + "type": "string", + "nullable": true + }, + "firstName": { + "type": "string", + "nullable": true + }, + "lastName": { + "type": "string", + "nullable": true + }, + "role": { + "$ref": "#/components/schemas/JustServe.Contracts.Enums.Role" + }, + "isLead": { + "type": "boolean" + }, + "email": { + "type": "string", + "nullable": true + }, + "phone": { + "type": "string", + "nullable": true + }, + "keywords": { + "type": "string", + "nullable": true + }, + "isActive": { + "type": "boolean" + }, + "updatedBy": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.UpdatedBy" + }, + "permissions": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Authentication.BoundaryPermissionBounded" + }, + "nullable": true + }, + "civicBoundaries": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Geographies.GeographyBounded" + }, + "nullable": true + }, + "churchBoundaries": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Geographies.GeographyBounded" + }, + "nullable": true + }, + "organizations": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Organizations.OrganizationBounded" + }, + "nullable": true + }, + "pendingOrganizations": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Projects.ProjectBounded" + }, + "nullable": true + }, + "pendingProjects": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Projects.ProjectBounded" + }, + "nullable": true + }, + "activeProjects": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Projects.ProjectBounded" + }, + "nullable": true + }, + "historicalProjects": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Projects.ProjectBounded" + }, + "nullable": true + }, + "draftProjects": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Projects.ProjectBounded" + }, + "nullable": true + }, + "templateProjects": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Projects.ProjectBounded" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Responses.UserResultLimited": { + "type": "object", + "properties": { + "firstName": { + "type": "string", + "nullable": true + }, + "lastName": { + "type": "string", + "nullable": true + }, + "name": { + "type": "string", + "nullable": true, + "readOnly": true + }, + "email": { + "type": "string", + "nullable": true + }, + "userId": { + "type": "string", + "nullable": true + }, + "projects": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.ProjectSlim" + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Responses.UserSearchResult": { + "type": "object", + "properties": { + "id": { + "type": "string", + "nullable": true + }, + "firstName": { + "type": "string", + "nullable": true + }, + "lastName": { + "type": "string", + "nullable": true + }, + "userName": { + "type": "string", + "nullable": true + }, + "language": { + "type": "string", + "nullable": true + }, + "address": { + "type": "string", + "nullable": true + }, + "neighborhood": { + "type": "string", + "nullable": true + }, + "city": { + "type": "string", + "nullable": true + }, + "state": { + "type": "string", + "nullable": true + }, + "postal": { + "type": "string", + "nullable": true + }, + "country": { + "type": "string", + "nullable": true + }, + "countryCode": { + "type": "string", + "nullable": true + }, + "isActive": { + "type": "boolean" + }, + "skills": { + "type": "array", + "items": { + "type": "string" + }, + "nullable": true + }, + "interests": { + "type": "array", + "items": { + "type": "string" + }, + "nullable": true + }, + "tools": { + "type": "array", + "items": { + "type": "string" + }, + "nullable": true + }, + "email": { + "type": "string", + "nullable": true + }, + "phone": { + "type": "string", + "nullable": true + }, + "keywords": { + "type": "string", + "nullable": true + }, + "adminRole": { + "$ref": "#/components/schemas/JustServe.Contracts.Enums.Role" + }, + "organizations": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Organizations.Organization" + }, + "nullable": true + }, + "permissions": { + "type": "array", + "items": { + "type": "string" + }, + "nullable": true + }, + "assignedAreas": { + "type": "array", + "items": { + "type": "string" + }, + "nullable": true + }, + "churchBoundaries": { + "type": "array", + "items": { + "type": "string" + }, + "nullable": true + }, + "civicBoundaries": { + "type": "array", + "items": { + "type": "string" + }, + "nullable": true + }, + "manageableAdmin": { + "type": "boolean" + }, + "showsSensitiveInfo": { + "type": "boolean" + }, + "distance": { + "type": "integer", + "format": "int32" + }, + "relativityScore": { + "type": "number", + "format": "double" + }, + "volunteerProjects": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.ProjectSlim" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Responses.UserSearchResults": { + "type": "object", + "properties": { + "count": { + "type": "integer", + "format": "int32" + }, + "users": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.UserSearchResult" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Responses.UserSlim": { + "type": "object", + "properties": { + "id": { + "type": "string", + "nullable": true + }, + "name": { + "type": "string", + "nullable": true + }, + "lastName": { + "type": "string", + "nullable": true, + "deprecated": true + }, + "email": { + "type": "string", + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Responses.UserSlimSearchResult": { + "type": "object", + "properties": { + "id": { + "type": "string", + "nullable": true + }, + "firstName": { + "type": "string", + "nullable": true + }, + "lastName": { + "type": "string", + "nullable": true + }, + "userName": { + "type": "string", + "nullable": true + }, + "email": { + "type": "string", + "nullable": true + }, + "state": { + "type": "string", + "nullable": true + }, + "adminRole": { + "$ref": "#/components/schemas/JustServe.Contracts.Enums.Role" + }, + "adminRoleName": { + "type": "string", + "nullable": true + }, + "permissions": { + "type": "array", + "items": { + "type": "string" + }, + "nullable": true + }, + "organizationName": { + "type": "string", + "nullable": true + }, + "churchBoundaryName": { + "type": "string", + "nullable": true + }, + "showsSensitiveInfo": { + "type": "boolean" + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Responses.UserSlimSearchResults": { + "type": "object", + "properties": { + "count": { + "type": "integer", + "format": "int32" + }, + "users": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.UserSlimSearchResult" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Responses.VolunteerDetails": { + "type": "object", + "properties": { + "volunteerId": { + "type": "string", + "nullable": true + }, + "userId": { + "type": "string", + "nullable": true + }, + "facebook": { + "type": "boolean" + }, + "name": { + "type": "string", + "nullable": true + }, + "email": { + "type": "string", + "nullable": true + }, + "volunteerLanguage": { + "type": "string", + "nullable": true + }, + "phone": { + "type": "string", + "nullable": true + }, + "hoursServed": { + "type": "number", + "format": "double" + }, + "adminReportedHours": { + "type": "number", + "format": "double" + }, + "date": { + "type": "string", + "format": "date-time" + }, + "dateFormatted": { + "type": "string", + "format": "date-time" + }, + "volunteeredOn": { + "type": "string", + "format": "date-time" + }, + "groupSize": { + "type": "integer", + "format": "int32" + }, + "neighborhood": { + "type": "string", + "nullable": true + }, + "volunteerNotes": { + "type": "string", + "nullable": true + }, + "city": { + "type": "string", + "nullable": true + }, + "state": { + "type": "string", + "nullable": true + }, + "postal": { + "type": "string", + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Responses.VolunteerLiteDetails": { + "type": "object", + "properties": { + "userId": { + "type": "string", + "format": "uuid" + }, + "volunteerId": { + "type": "string", + "format": "uuid" + }, + "name": { + "type": "string", + "nullable": true + }, + "email": { + "type": "string", + "nullable": true + }, + "phone": { + "type": "string", + "nullable": true + }, + "hoursServed": { + "type": "number", + "format": "double" + }, + "adminReportedHours": { + "type": "number", + "format": "double" + }, + "groupSize": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "volunteerDate": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "projectEventId": { + "type": "string", + "format": "uuid" + }, + "projectEventStartDate": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "projectEventStartDateTimeOffset": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "projectEventEndDate": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "projectEventEndDateTimeOffset": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "note": { + "type": "string", + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Responses.VolunteerMatchProject": { + "type": "object", + "properties": { + "projectId": { + "type": "string", + "nullable": true + }, + "link": { + "type": "string", + "nullable": true + }, + "title": { + "type": "string", + "nullable": true + }, + "shortDescription": { + "type": "string", + "nullable": true + }, + "longDescription": { + "type": "string", + "nullable": true + }, + "image": { + "type": "string", + "nullable": true + }, + "location": { + "type": "string", + "nullable": true + }, + "suitableAllAges": { + "type": "boolean" + }, + "groupProjects": { + "type": "boolean" + }, + "volunteerRemotely": { + "type": "boolean" + }, + "volunteerFromAnywhere": { + "type": "boolean" + }, + "itemDonations": { + "type": "boolean" + }, + "wheelchairAccessible": { + "type": "boolean" + }, + "indoors": { + "type": "boolean" + }, + "forYouthGroups": { + "type": "boolean" + }, + "skills": { + "type": "array", + "items": { + "type": "string" + }, + "nullable": true + }, + "interests": { + "type": "array", + "items": { + "type": "string" + }, + "nullable": true + }, + "inPerson": { + "type": "boolean" + }, + "lastUpdated": { + "type": "string", + "nullable": true + }, + "updateStatus": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.WidgetProjectStatus" + }, + "orgId": { + "type": "string", + "nullable": true + }, + "orgName": { + "type": "string", + "nullable": true + }, + "orgURL": { + "type": "string", + "nullable": true + }, + "shifts": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.VolunteerMatchProjectShift" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Responses.VolunteerMatchProjectShift": { + "type": "object", + "properties": { + "start": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "end": { + "type": "string", + "format": "date-time", + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Responses.WidgetProjectResults": { + "type": "object", + "properties": { + "totalResults": { + "type": "integer", + "format": "int32" + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Responses.WidgetProjectStatus": { + "enum": [ + "Active", + "Inactive" + ], + "type": "integer", + "format": "int32" + }, + "JustServe.Contracts.Responses.keyvalue": { + "type": "object", + "properties": { + "id": { + "type": "string", + "nullable": true + }, + "value": { + "type": "string", + "nullable": true + }, + "lang": { + "type": "string", + "nullable": true + }, + "category": { + "type": "string", + "nullable": true + }, + "current": { + "type": "boolean" + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Story": { + "type": "object", + "properties": { + "id": { + "type": "string", + "nullable": true + }, + "projectId": { + "type": "string", + "nullable": true + }, + "projectTitle": { + "type": "string", + "nullable": true + }, + "isProjectActive": { + "type": "boolean" + }, + "language": { + "type": "string", + "nullable": true + }, + "ownerId": { + "type": "string", + "nullable": true + }, + "title": { + "type": "string", + "nullable": true + }, + "introduction": { + "type": "string", + "nullable": true + }, + "body": { + "type": "string", + "nullable": true + }, + "images": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.ImagePairDetails" + }, + "nullable": true + }, + "mainImage": { + "$ref": "#/components/schemas/JustServe.Contracts.ImagePairDetails" + }, + "videos": { + "type": "array", + "items": { + "type": "string" + }, + "nullable": true + }, + "videoUrl": { + "type": "string", + "nullable": true + }, + "location": { + "$ref": "#/components/schemas/JustServe.Contracts.Locations.Location" + }, + "created": { + "type": "string", + "format": "date-time" + }, + "updated": { + "type": "string", + "format": "date-time" + }, + "createdBy": { + "type": "string", + "nullable": true + }, + "updatedBy": { + "type": "string", + "nullable": true + }, + "appendedIntro": { + "type": "boolean" + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Users.DynamicsNewsletterInfo": { + "type": "object", + "properties": { + "userId": { + "type": "string", + "nullable": true + }, + "emailProjectData": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Users.ProjectIdAndDynamicsType" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Users.DynamicsNewsletterInfoAllUsers": { + "type": "object", + "properties": { + "id": { + "type": "string", + "nullable": true + }, + "runDate": { + "type": "string", + "format": "date-time" + }, + "userNewsletterInfo": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Users.DynamicsNewsletterInfo" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Users.DynamicsNewsletterInfoMetadata": { + "type": "object", + "properties": { + "id": { + "type": "string", + "nullable": true + }, + "runDate": { + "type": "string", + "format": "date-time" + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Users.FavoriteOrganization": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "nullable": true + }, + "favoritedOrgOn": { + "type": "string", + "format": "date-time" + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Users.FavoriteProject": { + "type": "object", + "properties": { + "projectId": { + "type": "string", + "nullable": true + }, + "favoritedProjectOn": { + "type": "string", + "format": "date-time" + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Users.MobileUser": { + "type": "object", + "properties": { + "userId": { + "type": "string", + "nullable": true + }, + "shouldPromptUserForZip": { + "type": "boolean" + }, + "userVerified": { + "type": "boolean" + }, + "showProfileIncompleteNotification": { + "type": "boolean" + }, + "personal": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.Personalsettings" + }, + "location": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.Mobile.MobileLocationSlim" + }, + "projectOptions": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.Mobile.Projectsearchpreferences" + }, + "contactOptions": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.Mobile.Notificationsettings" + }, + "interests": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.Mobile.Interests" + }, + "skills": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.Mobile.Skills" + }, + "tools": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.Mobile.Tools" + }, + "daysOfTheWeek": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.Mobile.DaysOfTheWeek" + }, + "timesOfDay": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.Mobile.TimesOfDay" + }, + "favoriteOrganizations": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.Mobile.Favoriteorganizations" + }, + "favoriteProjects": { + "$ref": "#/components/schemas/JustServe.Contracts.Responses.Mobile.Favoriteprojects" + }, + "volunteeredEvents": { + "type": "array", + "items": { + "type": "string" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Users.NotificationPreferences": { + "type": "object", + "properties": { + "notifyUpcomingVolunteeredProjects": { + "type": "boolean" + }, + "notifyUpcomingVolunteeredProjectsDaysPrior": { + "type": "integer", + "format": "int32" + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Users.ProjectIdAndDynamicsType": { + "type": "object", + "properties": { + "sectionType": { + "type": "string", + "nullable": true + }, + "projectId": { + "type": "string", + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Users.User": { + "required": [ + "firstName" + ], + "type": "object", + "properties": { + "id": { + "type": "string", + "nullable": true + }, + "firstName": { + "minLength": 1, + "type": "string" + }, + "lastName": { + "type": "string", + "nullable": true + }, + "email": { + "type": "string", + "nullable": true + }, + "userName": { + "type": "string", + "nullable": true + }, + "phone": { + "type": "string", + "nullable": true + }, + "keywords": { + "type": "string", + "nullable": true + }, + "language": { + "type": "string", + "nullable": true + }, + "location": { + "$ref": "#/components/schemas/JustServe.Contracts.Locations.Location" + }, + "unsubscribeDate": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "facebookId": { + "type": "string", + "nullable": true + }, + "facebookZipCodeNotified": { + "type": "boolean" + }, + "googleUserId": { + "type": "string", + "nullable": true + }, + "appleUserId": { + "type": "string", + "nullable": true + }, + "generalEmailOptIn": { + "type": "boolean" + }, + "generalMarketingOptIn": { + "type": "boolean", + "nullable": true + }, + "volunteerNewsletter": { + "type": "boolean" + }, + "receiveTexts": { + "type": "boolean" + }, + "includeSponsorAdminInfo": { + "type": "boolean" + }, + "volunteerNewsletterRadius": { + "type": "integer", + "format": "int32" + }, + "radiusType": { + "$ref": "#/components/schemas/JustServe.Contracts.Enums.DistanceType" + }, + "adminNewsletter": { + "type": "boolean" + }, + "adminNewsletterLastNotified": { + "type": "string", + "format": "date-time" + }, + "favoriteOrganizations": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Users.FavoriteOrganization" + }, + "nullable": true + }, + "favoriteProjects": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Users.FavoriteProject" + }, + "nullable": true + }, + "roles": { + "type": "array", + "items": { + "type": "string" + }, + "nullable": true + }, + "claims": { + "type": "array", + "items": { + "$ref": "#/components/schemas/System.Security.Claims.Claim" + }, + "nullable": true + }, + "isActive": { + "type": "boolean" + }, + "lockoutCount": { + "type": "integer", + "format": "int32" + }, + "trainedDate": { + "type": "string", + "format": "date-time" + }, + "lockoutDateTime": { + "type": "string", + "format": "date-time" + }, + "skills": { + "type": "array", + "items": { + "type": "string" + }, + "nullable": true, + "deprecated": true + }, + "interests": { + "type": "array", + "items": { + "type": "string" + }, + "nullable": true, + "deprecated": true + }, + "tools": { + "type": "array", + "items": { + "type": "string" + }, + "nullable": true, + "deprecated": true + }, + "userSkills": { + "type": "array", + "items": { + "type": "integer", + "format": "int32" + }, + "nullable": true + }, + "userInterests": { + "type": "array", + "items": { + "type": "integer", + "format": "int32" + }, + "nullable": true + }, + "userTools": { + "type": "array", + "items": { + "type": "integer", + "format": "int32" + }, + "nullable": true + }, + "daysAvailableList": { + "type": "array", + "items": { + "$ref": "#/components/schemas/System.DayOfWeek" + }, + "nullable": true + }, + "timesAvailableList": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Enums.TimeOfDay" + }, + "nullable": true + }, + "suitableAllAges": { + "type": "boolean" + }, + "groupProject": { + "type": "boolean" + }, + "projectFiltersOpen": { + "type": "boolean" + }, + "volunteerRemotely": { + "type": "boolean" + }, + "itemDonations": { + "type": "boolean" + }, + "wheelchairAccessible": { + "type": "boolean" + }, + "indoors": { + "type": "boolean" + }, + "sponsorRole": { + "type": "boolean" + }, + "timePref": { + "type": "integer", + "format": "int32" + }, + "password": { + "type": "string", + "nullable": true + }, + "salt": { + "type": "string", + "nullable": true + }, + "createProjectRoleGranted": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "viewedWhatsNewDate": { + "type": "string", + "format": "date-time" + }, + "lastNotified": { + "type": "string", + "format": "date-time" + }, + "activationEmailLastNotified": { + "type": "string", + "format": "date-time" + }, + "activationEmailReminderCount": { + "type": "integer", + "format": "int32" + }, + "lastSignIn": { + "type": "string", + "format": "date-time" + }, + "userHistory": { + "$ref": "#/components/schemas/JustServe.Contracts.Logging.UserHistory" + }, + "created": { + "type": "string", + "format": "date-time" + }, + "updated": { + "type": "string", + "format": "date-time" + }, + "deleted": { + "type": "boolean" + }, + "deletedOn": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "deletedBy": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "personalInfoModifiedDate": { + "type": "string", + "format": "date-time" + }, + "notificationSettingsModifiedDate": { + "type": "string", + "format": "date-time" + }, + "searchPreferencesModifiedDate": { + "type": "string", + "format": "date-time" + }, + "locationModifiedDate": { + "type": "string", + "format": "date-time" + }, + "skillsModifiedDate": { + "type": "string", + "format": "date-time" + }, + "interestsModifiedDate": { + "type": "string", + "format": "date-time" + }, + "toolsModifiedDate": { + "type": "string", + "format": "date-time" + }, + "favProjectsModifiedDate": { + "type": "string", + "format": "date-time" + }, + "favOrgsModifiedDate": { + "type": "string", + "format": "date-time" + }, + "daysAvailableModifiedDate": { + "type": "string", + "format": "date-time" + }, + "timesAvailableModifiedDate": { + "type": "string", + "format": "date-time" + }, + "notificationPreferences": { + "$ref": "#/components/schemas/JustServe.Contracts.Users.NotificationPreferences" + }, + "disasterReliefRegistrationSeen": { + "type": "boolean" + }, + "donateToDisasterReliefChecked": { + "type": "boolean" + }, + "volunteerForDisasterReliefChecked": { + "type": "boolean" + }, + "disasterReliefAvailabilityDate": { + "type": "string", + "format": "date-time" + }, + "forYouthGroups": { + "type": "boolean" + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Users.UserRegistrationModel": { + "required": [ + "email", + "firstName", + "lastName", + "password" + ], + "type": "object", + "properties": { + "firstName": { + "maxLength": 50, + "minLength": 1, + "type": "string" + }, + "lastName": { + "maxLength": 50, + "minLength": 1, + "type": "string" + }, + "email": { + "minLength": 1, + "pattern": "^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,4}$", + "type": "string" + }, + "password": { + "maxLength": 100, + "minLength": 8, + "type": "string", + "format": "password" + }, + "postal": { + "type": "string", + "nullable": true + }, + "city": { + "type": "string", + "nullable": true + }, + "language": { + "type": "string", + "nullable": true + }, + "clientId": { + "type": "string", + "nullable": true + }, + "clientSecret": { + "type": "string", + "nullable": true + }, + "latitude": { + "type": "number", + "format": "double", + "nullable": true + }, + "longitude": { + "type": "number", + "format": "double", + "nullable": true + }, + "country": { + "type": "string", + "nullable": true + }, + "countryCode": { + "type": "string", + "nullable": true + }, + "appleToken": { + "type": "string", + "nullable": true + }, + "appleAuthCode": { + "type": "string", + "nullable": true + }, + "googleToken": { + "type": "string", + "nullable": true + }, + "facebookToken": { + "type": "string", + "nullable": true + }, + "userName": { + "type": "string", + "nullable": true, + "deprecated": true + }, + "countryCodeAlpha3": { + "type": "string", + "nullable": true, + "deprecated": true + }, + "state": { + "type": "string", + "nullable": true, + "deprecated": true + }, + "address": { + "type": "string", + "nullable": true, + "deprecated": true + }, + "distanceUnits": { + "type": "string", + "nullable": true, + "deprecated": true + }, + "clock": { + "type": "string", + "nullable": true, + "deprecated": true + }, + "skills": { + "type": "array", + "items": { + "type": "string" + }, + "nullable": true, + "deprecated": true + }, + "interests": { + "type": "array", + "items": { + "type": "string" + }, + "nullable": true, + "deprecated": true + }, + "tools": { + "type": "array", + "items": { + "type": "string" + }, + "nullable": true, + "deprecated": true + }, + "daysAvailable": { + "type": "array", + "items": { + "$ref": "#/components/schemas/System.DayOfWeek" + }, + "nullable": true, + "deprecated": true + }, + "timesAvailable": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Enums.TimeOfDay" + }, + "nullable": true, + "deprecated": true + }, + "disasterReliefRegistrationSeen": { + "type": "boolean", + "deprecated": true + }, + "donateToDisasterReliefChecked": { + "type": "boolean", + "deprecated": true + }, + "volunteerForDisasterReliefChecked": { + "type": "boolean", + "deprecated": true + }, + "disasterReliefAvailabilityDate": { + "type": "string", + "format": "date-time", + "deprecated": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Vanilla.CustomNotification": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "typeId": { + "type": "integer", + "format": "int32" + }, + "type": { + "$ref": "#/components/schemas/JustServe.Contracts.Enums.NotificationType" + }, + "levelId": { + "type": "integer", + "format": "int32" + }, + "level": { + "$ref": "#/components/schemas/JustServe.Contracts.Enums.NotificationLevel" + }, + "title": { + "type": "string", + "nullable": true + }, + "description": { + "type": "string", + "nullable": true + }, + "languageId": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "language": { + "$ref": "#/components/schemas/JustServe.Contracts.Enums.Lang" + }, + "redirectLink": { + "type": "string", + "nullable": true + }, + "startDate": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "endDate": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "adminOnly": { + "type": "boolean", + "nullable": true + }, + "created": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "updated": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "createdBy": { + "type": "string", + "format": "uuid" + }, + "updatedBy": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "projectEventId": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "createdByNavigation": { + "$ref": "#/components/schemas/JustServe.Contracts.Users.User" + }, + "updatedByNavigation": { + "$ref": "#/components/schemas/JustServe.Contracts.Users.User" + }, + "projectEvent": { + "$ref": "#/components/schemas/JustServe.Contracts.Vanilla.Projects.ProjectEvent" + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Vanilla.Geographies.ChurchBoundaryCivic": { + "type": "object", + "properties": { + "churchGeographyUserRoleId": { + "type": "string", + "format": "uuid" + }, + "civicGeographyId": { + "type": "string", + "format": "uuid" + }, + "civicGeography": { + "$ref": "#/components/schemas/JustServe.Contracts.Vanilla.Geographies.CivicGeography" + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Vanilla.Geographies.ChurchGeography": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "typeId": { + "type": "integer", + "format": "int32" + }, + "type": { + "$ref": "#/components/schemas/JustServe.Contracts.Enums.GeographyType" + }, + "updated": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "unitId": { + "type": "string", + "nullable": true + }, + "name": { + "type": "string", + "nullable": true + }, + "areaUnitId": { + "type": "string", + "nullable": true + }, + "missionUnitId": { + "type": "string", + "nullable": true + }, + "ccUnitId": { + "type": "string", + "nullable": true + }, + "stakeUnitId": { + "type": "string", + "nullable": true + }, + "active": { + "type": "boolean", + "nullable": true + }, + "countryId": { + "type": "string", + "format": "uuid" + }, + "stakeLatitude": { + "type": "number", + "format": "double", + "nullable": true + }, + "stakeLongitude": { + "type": "number", + "format": "double", + "nullable": true + }, + "maxLatitude": { + "type": "number", + "format": "double", + "nullable": true + }, + "minLatitude": { + "type": "number", + "format": "double", + "nullable": true + }, + "maxLongitude": { + "type": "number", + "format": "double", + "nullable": true + }, + "minLongitude": { + "type": "number", + "format": "double", + "nullable": true + }, + "mapId": { + "type": "string", + "nullable": true + }, + "country": { + "$ref": "#/components/schemas/JustServe.Contracts.Vanilla.Geographies.CivicGeography" + }, + "countryInfo": { + "$ref": "#/components/schemas/JustServe.Contracts.Vanilla.Geographies.CountryInfo" + }, + "areaUnit": { + "$ref": "#/components/schemas/JustServe.Contracts.Vanilla.Geographies.ChurchGeography" + }, + "missionUnit": { + "$ref": "#/components/schemas/JustServe.Contracts.Vanilla.Geographies.ChurchGeography" + }, + "ccUnit": { + "$ref": "#/components/schemas/JustServe.Contracts.Vanilla.Geographies.ChurchGeography" + }, + "parentUnit": { + "$ref": "#/components/schemas/JustServe.Contracts.Vanilla.Geographies.ChurchGeography" + }, + "childrenUnits": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Vanilla.Geographies.ChurchGeography" + }, + "nullable": true + }, + "notifications": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Vanilla.CustomNotification" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Vanilla.Geographies.ChurchGeographyAdminLabelEnum": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "churchGeographyId": { + "type": "string", + "format": "uuid" + }, + "name": { + "type": "string", + "nullable": true + }, + "description": { + "type": "string", + "nullable": true + }, + "created": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "updated": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "createdBy": { + "type": "string", + "format": "uuid" + }, + "updatedBy": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "deleted": { + "type": "boolean" + }, + "languageId": { + "type": "integer", + "format": "int32" + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Vanilla.Geographies.CivicGeography": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "typeId": { + "type": "integer", + "format": "int32" + }, + "type": { + "$ref": "#/components/schemas/JustServe.Contracts.Enums.GeographyType" + }, + "cityId": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "countyId": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "stateId": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "countryId": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "latitude": { + "type": "number", + "format": "double", + "nullable": true + }, + "longitude": { + "type": "number", + "format": "double", + "nullable": true + }, + "maxLatitude": { + "type": "number", + "format": "double", + "nullable": true + }, + "minLatitude": { + "type": "number", + "format": "double", + "nullable": true + }, + "maxLongitude": { + "type": "number", + "format": "double", + "nullable": true + }, + "minLongitude": { + "type": "number", + "format": "double", + "nullable": true + }, + "createdAt": { + "type": "string", + "format": "date-time" + }, + "mapId": { + "type": "string", + "nullable": true + }, + "name": { + "type": "string", + "nullable": true + }, + "code": { + "type": "string", + "nullable": true + }, + "city": { + "$ref": "#/components/schemas/JustServe.Contracts.Vanilla.Geographies.CivicGeography" + }, + "country": { + "$ref": "#/components/schemas/JustServe.Contracts.Vanilla.Geographies.CivicGeography" + }, + "county": { + "$ref": "#/components/schemas/JustServe.Contracts.Vanilla.Geographies.CivicGeography" + }, + "state": { + "$ref": "#/components/schemas/JustServe.Contracts.Vanilla.Geographies.CivicGeography" + }, + "countryInfo": { + "$ref": "#/components/schemas/JustServe.Contracts.Vanilla.Geographies.CountryInfo" + }, + "parent": { + "$ref": "#/components/schemas/JustServe.Contracts.Vanilla.Geographies.CivicGeography" + }, + "children": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Vanilla.Geographies.CivicGeography" + }, + "nullable": true + }, + "translations": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Vanilla.Geographies.CivicGeographyTranslation" + }, + "nullable": true + }, + "notifications": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Vanilla.CustomNotification" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Vanilla.Geographies.CivicGeographyTranslation": { + "type": "object", + "properties": { + "civicGeographyId": { + "type": "string", + "format": "uuid" + }, + "languageId": { + "type": "integer", + "format": "int32" + }, + "typeId": { + "type": "integer", + "format": "int32" + }, + "countryId": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "name": { + "type": "string", + "nullable": true + }, + "code": { + "type": "string", + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Vanilla.Geographies.CountryInfo": { + "type": "object", + "properties": { + "countryId": { + "type": "string", + "format": "uuid" + }, + "defaultLanguageId": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "isLaunched": { + "type": "boolean", + "nullable": true + }, + "countryCode2": { + "type": "string", + "nullable": true + }, + "countryCode3": { + "type": "string", + "nullable": true + }, + "phoneCode": { + "type": "string", + "nullable": true + }, + "usePostal": { + "type": "boolean", + "nullable": true + }, + "useMetricUnits": { + "type": "boolean", + "nullable": true + }, + "twelveHourClock": { + "type": "boolean", + "nullable": true + }, + "hideStateData": { + "type": "boolean", + "nullable": true + }, + "hideCountyData": { + "type": "boolean", + "nullable": true + }, + "legalLogInAge": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "inEuropeanUnion": { + "type": "boolean", + "nullable": true + }, + "houseNumAfterStreet": { + "type": "boolean", + "nullable": true + }, + "postalValidationRegex": { + "type": "string", + "nullable": true + }, + "country": { + "$ref": "#/components/schemas/JustServe.Contracts.Vanilla.Geographies.CivicGeography" + }, + "areaUnits": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Vanilla.Geographies.ChurchGeography" + }, + "nullable": true + }, + "postals": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Vanilla.Geographies.PostalGeography" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Vanilla.Geographies.PostalGeography": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "zipcode": { + "type": "string", + "nullable": true + }, + "countryId": { + "type": "string", + "format": "uuid" + }, + "latitude": { + "type": "number", + "format": "double", + "nullable": true + }, + "longitude": { + "type": "number", + "format": "double", + "nullable": true + }, + "maxLatitude": { + "type": "number", + "format": "double", + "nullable": true + }, + "minLatitude": { + "type": "number", + "format": "double", + "nullable": true + }, + "maxLongitude": { + "type": "number", + "format": "double", + "nullable": true + }, + "minLongitude": { + "type": "number", + "format": "double", + "nullable": true + }, + "createdOn": { + "type": "string", + "format": "date-time" + }, + "mapId": { + "type": "string", + "nullable": true + }, + "country": { + "$ref": "#/components/schemas/JustServe.Contracts.Vanilla.Geographies.CivicGeography" + }, + "countryInfo": { + "$ref": "#/components/schemas/JustServe.Contracts.Vanilla.Geographies.CountryInfo" + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Vanilla.Organizations.Organization": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "languageId": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "language": { + "$ref": "#/components/schemas/JustServe.Contracts.Enums.Lang" + }, + "name": { + "type": "string", + "nullable": true + }, + "description": { + "type": "string", + "nullable": true + }, + "statusId": { + "type": "integer", + "format": "int32" + }, + "status": { + "$ref": "#/components/schemas/JustServe.Contracts.Enums.OrganizationStatus" + }, + "typeId": { + "type": "integer", + "format": "int32" + }, + "type": { + "$ref": "#/components/schemas/JustServe.Contracts.Enums.OrganizationType" + }, + "defaultId": { + "type": "integer", + "format": "int32" + }, + "default": { + "$ref": "#/components/schemas/JustServe.Contracts.Enums.DefaultSection" + }, + "activationDate": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "website": { + "type": "string", + "nullable": true + }, + "autoRedirect": { + "type": "boolean", + "nullable": true + }, + "url": { + "type": "string", + "nullable": true + }, + "internalUrl": { + "type": "string", + "nullable": true + }, + "logo": { + "type": "string", + "nullable": true + }, + "banner": { + "type": "string", + "nullable": true + }, + "facebookPath": { + "type": "string", + "nullable": true + }, + "twitterPath": { + "type": "string", + "nullable": true + }, + "youtubePath": { + "type": "string", + "nullable": true + }, + "instagramPath": { + "type": "string", + "nullable": true + }, + "linkedinPath": { + "type": "string", + "nullable": true + }, + "created": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "updated": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "createdBy": { + "type": "string", + "format": "uuid" + }, + "updatedBy": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "aboutUs": { + "type": "string", + "nullable": true + }, + "contactName": { + "type": "string", + "nullable": true + }, + "contactPhone": { + "type": "string", + "nullable": true + }, + "contactEmail": { + "type": "string", + "nullable": true + }, + "deleted": { + "type": "boolean" + }, + "deletedOn": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "deletedBy": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "parentId": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "isVerified": { + "type": "boolean" + }, + "createdByNavigation": { + "$ref": "#/components/schemas/JustServe.Contracts.Vanilla.Users.User" + }, + "deletedByNavigation": { + "$ref": "#/components/schemas/JustServe.Contracts.Vanilla.Users.User" + }, + "updatedByNavigation": { + "$ref": "#/components/schemas/JustServe.Contracts.Vanilla.Users.User" + }, + "representatives": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Vanilla.Users.User" + }, + "nullable": true + }, + "userFavoriteOrganizations": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Vanilla.Users.UserFavoriteOrganization" + }, + "nullable": true + }, + "organizationGroups": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Vanilla.Organizations.OrganizationGroup" + }, + "nullable": true + }, + "organizationUserRoles": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Vanilla.Organizations.OrganizationUserRole" + }, + "nullable": true + }, + "projects": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Vanilla.Projects.Project" + }, + "nullable": true + }, + "location": { + "$ref": "#/components/schemas/JustServe.Contracts.Vanilla.Organizations.OrganizationLocation" + }, + "tags": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Vanilla.Tags.Tag" + }, + "nullable": true + }, + "parent": { + "$ref": "#/components/schemas/JustServe.Contracts.Vanilla.Organizations.Organization" + }, + "children": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Vanilla.Organizations.Organization" + }, + "nullable": true + }, + "attachments": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Vanilla.Organizations.OrganizationAttachment" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Vanilla.Organizations.OrganizationAttachment": { + "type": "object", + "properties": { + "attachmentId": { + "type": "string", + "format": "uuid" + }, + "mimetype": { + "type": "string", + "nullable": true + }, + "hostedFilename": { + "type": "string", + "nullable": true + }, + "hostedThumbnailFilename": { + "type": "string", + "nullable": true + }, + "fileExtension": { + "type": "string", + "nullable": true + }, + "title": { + "type": "string", + "nullable": true + }, + "description": { + "type": "string", + "nullable": true + }, + "created": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "createdBy": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "hostedFolderPath": { + "type": "string", + "nullable": true + }, + "fileDisplayName": { + "type": "string", + "nullable": true + }, + "attachmentTypeId": { + "type": "integer", + "format": "int32" + }, + "attachmentType": { + "$ref": "#/components/schemas/JustServe.Contracts.Enums.AttachmentType" + }, + "createdByNavigation": { + "$ref": "#/components/schemas/JustServe.Contracts.Vanilla.Users.User" + }, + "organizationId": { + "type": "string", + "format": "uuid" + }, + "organization": { + "$ref": "#/components/schemas/JustServe.Contracts.Vanilla.Organizations.Organization" + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Vanilla.Organizations.OrganizationGroup": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "format": "uuid" + }, + "typeId": { + "type": "integer", + "format": "int32" + }, + "unlisted": { + "type": "boolean", + "nullable": true + }, + "defaultId": { + "type": "integer", + "format": "int32" + }, + "organizationEnabled": { + "type": "boolean", + "nullable": true + }, + "projectsEnabled": { + "type": "boolean", + "nullable": true + }, + "questionsEnabled": { + "type": "boolean", + "nullable": true + }, + "aboutUsEnabled": { + "type": "boolean", + "nullable": true + }, + "giveEnabled": { + "type": "boolean", + "nullable": true + }, + "about": { + "type": "string", + "nullable": true + }, + "contactName": { + "type": "string", + "nullable": true + }, + "contactPhone": { + "type": "string", + "nullable": true + }, + "contactEmail": { + "type": "string", + "nullable": true + }, + "organization": { + "$ref": "#/components/schemas/JustServe.Contracts.Vanilla.Organizations.Organization" + }, + "projects": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Vanilla.Projects.Project" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Vanilla.Organizations.OrganizationLocation": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "format": "uuid" + }, + "displayAddress": { + "type": "string", + "nullable": true + }, + "displayAddress2": { + "type": "string", + "nullable": true + }, + "displayPostalCode": { + "type": "string", + "nullable": true + }, + "displayCity": { + "type": "string", + "nullable": true + }, + "displayNeighborhood": { + "type": "string", + "nullable": true + }, + "displayCounty": { + "type": "string", + "nullable": true + }, + "displayState": { + "type": "string", + "nullable": true + }, + "displayCountry": { + "type": "string", + "nullable": true + }, + "displayCountryCode": { + "type": "string", + "nullable": true + }, + "civicGeographyId": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "churchGeographyId": { + "type": "string", + "format": "uuid" + }, + "updated": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "latitude": { + "type": "number", + "format": "double", + "nullable": true + }, + "longitude": { + "type": "number", + "format": "double", + "nullable": true + }, + "maxLatitude": { + "type": "number", + "format": "double", + "nullable": true + }, + "minLatitude": { + "type": "number", + "format": "double", + "nullable": true + }, + "maxLongitude": { + "type": "number", + "format": "double", + "nullable": true + }, + "minLongitude": { + "type": "number", + "format": "double", + "nullable": true + }, + "churchGeography": { + "$ref": "#/components/schemas/JustServe.Contracts.Vanilla.Geographies.ChurchGeography" + }, + "civicGeography": { + "$ref": "#/components/schemas/JustServe.Contracts.Vanilla.Geographies.CivicGeography" + }, + "organization": { + "$ref": "#/components/schemas/JustServe.Contracts.Vanilla.Organizations.Organization" + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Vanilla.Organizations.OrganizationUserRole": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "organizationId": { + "type": "string", + "format": "uuid" + }, + "userId": { + "type": "string", + "format": "uuid" + }, + "roleId": { + "type": "integer", + "format": "int32" + }, + "updated": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "updatedBy": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "organization": { + "$ref": "#/components/schemas/JustServe.Contracts.Vanilla.Organizations.Organization" + }, + "role": { + "$ref": "#/components/schemas/JustServe.Contracts.Enums.Role" + }, + "updatedByNavigation": { + "$ref": "#/components/schemas/JustServe.Contracts.Users.User" + }, + "user": { + "$ref": "#/components/schemas/JustServe.Contracts.Users.User" + }, + "civicGeographies": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Vanilla.Geographies.CivicGeography" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Vanilla.Projects.Project": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "typeId": { + "type": "integer", + "format": "int32" + }, + "statusId": { + "type": "integer", + "format": "int32" + }, + "publishDate": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "title": { + "type": "string", + "nullable": true + }, + "shortDescription": { + "type": "string", + "nullable": true + }, + "longDescription": { + "type": "string", + "nullable": true + }, + "logo": { + "type": "string", + "nullable": true + }, + "contactName": { + "type": "string", + "nullable": true + }, + "contactPhone": { + "type": "string", + "nullable": true + }, + "contactEmail": { + "type": "string", + "nullable": true + }, + "sponsorUserId": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "sponsorTypeId": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "representativeUserId": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "waiverUrl": { + "type": "string", + "nullable": true + }, + "lastChangeReason": { + "type": "string", + "nullable": true + }, + "created": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "updated": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "createdBy": { + "type": "string", + "format": "uuid" + }, + "updatedBy": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "suitableAllAges": { + "type": "boolean", + "nullable": true + }, + "groupProjects": { + "type": "boolean", + "nullable": true + }, + "volunteerRemotely": { + "type": "boolean", + "nullable": true + }, + "volunteerFromAnywhere": { + "type": "boolean", + "nullable": true + }, + "itemDonations": { + "type": "boolean", + "nullable": true + }, + "wheelchairAccessible": { + "type": "boolean", + "nullable": true + }, + "indoors": { + "type": "boolean", + "nullable": true + }, + "forYouthGroups": { + "type": "boolean", + "nullable": true + }, + "unlisted": { + "type": "boolean", + "nullable": true + }, + "languageId": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "externalVolunteerUrl": { + "type": "string", + "nullable": true + }, + "external": { + "type": "boolean", + "nullable": true + }, + "archived": { + "type": "boolean", + "nullable": true + }, + "deleted": { + "type": "boolean" + }, + "deletedOn": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "deletedBy": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "regionSelected": { + "type": "boolean" + }, + "firstStartDateTimeOffset": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "lastEndDateTimeOffset": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "countryCode": { + "type": "string", + "nullable": true + }, + "multipleTimes": { + "type": "boolean", + "nullable": true + }, + "allEventsFilled": { + "type": "boolean", + "nullable": true + }, + "locationTypeId": { + "type": "integer", + "format": "int32" + }, + "nextOpportunity": { + "$ref": "#/components/schemas/JustServe.Contracts.Vanilla.Projects.ProjectEvent" + }, + "totalNextOpportunities": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "createdByNavigation": { + "$ref": "#/components/schemas/JustServe.Contracts.Vanilla.Users.User" + }, + "deletedByNavigation": { + "$ref": "#/components/schemas/JustServe.Contracts.Vanilla.Users.User" + }, + "representativeUser": { + "$ref": "#/components/schemas/JustServe.Contracts.Vanilla.Users.User" + }, + "sponsorUser": { + "$ref": "#/components/schemas/JustServe.Contracts.Vanilla.Users.User" + }, + "updatedByNavigation": { + "$ref": "#/components/schemas/JustServe.Contracts.Vanilla.Users.User" + }, + "projectApproval": { + "$ref": "#/components/schemas/JustServe.Contracts.Vanilla.Projects.ProjectApproval" + }, + "projectRecurring": { + "$ref": "#/components/schemas/JustServe.Contracts.Vanilla.Projects.ProjectRecurring" + }, + "projectAttachments": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Vanilla.Projects.ProjectAttachment" + }, + "nullable": true + }, + "projectDayOfWeeks": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Vanilla.Projects.ProjectDayOfWeek" + }, + "nullable": true + }, + "projectEventLocation": { + "$ref": "#/components/schemas/JustServe.Contracts.Vanilla.Projects.ProjectEventLocation" + }, + "projectEventRegions": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Vanilla.Geographies.CivicGeography" + }, + "nullable": true + }, + "projectEvents": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Vanilla.Projects.ProjectEvent" + }, + "nullable": true + }, + "tags": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Vanilla.Tags.Tag" + }, + "nullable": true + }, + "projectTimeOfDays": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Vanilla.Projects.ProjectTimeOfDay" + }, + "nullable": true + }, + "projectUserOwners": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Vanilla.Projects.ProjectUserOwner" + }, + "nullable": true + }, + "organizations": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Vanilla.Organizations.Organization" + }, + "nullable": true + }, + "organizationGroups": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Vanilla.Organizations.OrganizationGroup" + }, + "nullable": true + }, + "successStories": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Vanilla.Stories.SuccessStory" + }, + "nullable": true + }, + "userFavoriteProjects": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Vanilla.Users.UserFavoriteProject" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Vanilla.Projects.ProjectApproval": { + "type": "object", + "properties": { + "projectId": { + "type": "string", + "format": "uuid" + }, + "applicantUserId": { + "type": "string", + "format": "uuid" + }, + "assignedOn": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "approverUserId": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "levelId": { + "type": "integer", + "format": "int32" + }, + "level": { + "$ref": "#/components/schemas/JustServe.Contracts.Enums.GeographyType" + }, + "escalateDate": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "applicantUser": { + "$ref": "#/components/schemas/JustServe.Contracts.Vanilla.Users.User" + }, + "approverUser": { + "$ref": "#/components/schemas/JustServe.Contracts.Vanilla.Users.User" + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Vanilla.Projects.ProjectAttachment": { + "type": "object", + "properties": { + "attachmentId": { + "type": "string", + "format": "uuid" + }, + "mimetype": { + "type": "string", + "nullable": true + }, + "hostedFilename": { + "type": "string", + "nullable": true + }, + "hostedThumbnailFilename": { + "type": "string", + "nullable": true + }, + "fileExtension": { + "type": "string", + "nullable": true + }, + "title": { + "type": "string", + "nullable": true + }, + "description": { + "type": "string", + "nullable": true + }, + "created": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "createdBy": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "hostedFolderPath": { + "type": "string", + "nullable": true + }, + "fileDisplayName": { + "type": "string", + "nullable": true + }, + "attachmentTypeId": { + "type": "integer", + "format": "int32" + }, + "attachmentType": { + "$ref": "#/components/schemas/JustServe.Contracts.Enums.AttachmentType" + }, + "createdByNavigation": { + "$ref": "#/components/schemas/JustServe.Contracts.Vanilla.Users.User" + }, + "projectId": { + "type": "string", + "format": "uuid" + }, + "project": { + "$ref": "#/components/schemas/JustServe.Contracts.Vanilla.Projects.Project" + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Vanilla.Projects.ProjectDayOfWeek": { + "type": "object", + "properties": { + "projectId": { + "type": "string", + "format": "uuid" + }, + "dayOfWeekId": { + "type": "integer", + "format": "int32" + }, + "label": { + "type": "string", + "nullable": true + }, + "description": { + "type": "string", + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Vanilla.Projects.ProjectEvent": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "projectId": { + "type": "string", + "format": "uuid" + }, + "start": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "end": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "renewDate": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "shiftTitle": { + "type": "string", + "nullable": true + }, + "volunteerCap": { + "type": "boolean" + }, + "groupCap": { + "type": "boolean" + }, + "groupLimit": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "totalVolunteersNeeded": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "locationName": { + "type": "string", + "nullable": true + }, + "locationLink": { + "type": "string", + "nullable": true + }, + "specialDirections": { + "type": "string", + "nullable": true + }, + "qrCodeImageLocation": { + "type": "string", + "nullable": true + }, + "schedule": { + "type": "string", + "nullable": true + }, + "projectEventLocationId": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "projectRecurringTimeId": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "deletedOn": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "deletedBy": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "deleted": { + "type": "boolean" + }, + "contactName": { + "type": "string", + "nullable": true + }, + "contactPhone": { + "type": "string", + "nullable": true + }, + "contactEmail": { + "type": "string", + "nullable": true + }, + "eventCapReached": { + "type": "boolean", + "nullable": true + }, + "startDateTimeOffset": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "endDateTimeOffset": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "timezone": { + "type": "string", + "nullable": true + }, + "timeZoneEnumId": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "statusId": { + "type": "integer", + "format": "int32" + }, + "status": { + "$ref": "#/components/schemas/JustServe.Contracts.Enums.ProjectEventStatus" + }, + "volunteersNeeded": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "deletedByNavigation": { + "$ref": "#/components/schemas/JustServe.Contracts.Users.User" + }, + "project": { + "$ref": "#/components/schemas/JustServe.Contracts.Vanilla.Projects.Project" + }, + "projectEventLocation": { + "$ref": "#/components/schemas/JustServe.Contracts.Vanilla.Projects.ProjectEventLocation" + }, + "projectRecurringTime": { + "$ref": "#/components/schemas/JustServe.Contracts.Vanilla.Projects.ProjectRecurringTime" + }, + "projectEventRegions": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Vanilla.Geographies.CivicGeography" + }, + "nullable": true + }, + "projectVolunteers": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Vanilla.Projects.ProjectVolunteer" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Vanilla.Projects.ProjectEventLocation": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "displayAddress": { + "type": "string", + "nullable": true + }, + "displayAddress2": { + "type": "string", + "nullable": true + }, + "displayPostalCode": { + "type": "string", + "nullable": true + }, + "displayCity": { + "type": "string", + "nullable": true + }, + "displayNeighborhood": { + "type": "string", + "nullable": true + }, + "displayCounty": { + "type": "string", + "nullable": true + }, + "displayState": { + "type": "string", + "nullable": true + }, + "displayCountry": { + "type": "string", + "nullable": true + }, + "displayCountryCode": { + "type": "string", + "nullable": true + }, + "locationName": { + "type": "string", + "nullable": true + }, + "locationDetails": { + "type": "string", + "nullable": true + }, + "civicGeographyId": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "churchGeographyId": { + "type": "string", + "format": "uuid" + }, + "updated": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "latitude": { + "type": "number", + "format": "double", + "nullable": true + }, + "longitude": { + "type": "number", + "format": "double", + "nullable": true + }, + "projectId": { + "type": "string", + "format": "uuid" + }, + "maxLatitude": { + "type": "number", + "format": "double", + "nullable": true + }, + "minLatitude": { + "type": "number", + "format": "double", + "nullable": true + }, + "maxLongitude": { + "type": "number", + "format": "double", + "nullable": true + }, + "minLongitude": { + "type": "number", + "format": "double", + "nullable": true + }, + "timezone": { + "type": "string", + "nullable": true + }, + "timeZoneEnumId": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "churchGeography": { + "$ref": "#/components/schemas/JustServe.Contracts.Vanilla.Geographies.ChurchGeography" + }, + "civicGeography": { + "$ref": "#/components/schemas/JustServe.Contracts.Vanilla.Geographies.CivicGeography" + }, + "project": { + "$ref": "#/components/schemas/JustServe.Contracts.Vanilla.Projects.Project" + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Vanilla.Projects.ProjectRecurring": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "projectId": { + "type": "string", + "format": "uuid" + }, + "startDate": { + "type": "string", + "format": "date", + "nullable": true + }, + "endDate": { + "type": "string", + "format": "date", + "nullable": true + }, + "startDateTimeOffset": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "endDateTimeOffset": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "specialDirections": { + "type": "string", + "nullable": true + }, + "project": { + "$ref": "#/components/schemas/JustServe.Contracts.Vanilla.Projects.Project" + }, + "projectRecurringTimes": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Vanilla.Projects.ProjectRecurringTime" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Vanilla.Projects.ProjectRecurringTime": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "projectRecurringId": { + "type": "string", + "format": "uuid" + }, + "recurringTypeEnumId": { + "type": "integer", + "format": "int32" + }, + "recurringType": { + "$ref": "#/components/schemas/JustServe.Contracts.Enums.RecurringType" + }, + "startTime": { + "type": "string", + "format": "time", + "nullable": true + }, + "endTime": { + "type": "string", + "format": "time", + "nullable": true + }, + "volunteersCapped": { + "type": "boolean" + }, + "groupsCapped": { + "type": "boolean" + }, + "groupLimit": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "volunteersNeeded": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "sunday": { + "type": "boolean" + }, + "monday": { + "type": "boolean" + }, + "tuesday": { + "type": "boolean" + }, + "wednesday": { + "type": "boolean" + }, + "thursday": { + "type": "boolean" + }, + "friday": { + "type": "boolean" + }, + "saturday": { + "type": "boolean" + }, + "firstWeek": { + "type": "boolean" + }, + "secondWeek": { + "type": "boolean" + }, + "thirdWeek": { + "type": "boolean" + }, + "fourthWeek": { + "type": "boolean" + }, + "fifthWeek": { + "type": "boolean" + }, + "lastWeek": { + "type": "boolean" + }, + "projectEventLocationId": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "projectEventRegionId": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "contactName": { + "type": "string", + "nullable": true + }, + "contactPhone": { + "type": "string", + "nullable": true + }, + "contactEmail": { + "type": "string", + "nullable": true + }, + "startTimeFormatted": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "endTimeFormatted": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "specialDirections": { + "type": "string", + "nullable": true + }, + "locationName": { + "type": "string", + "nullable": true + }, + "locationLink": { + "type": "string", + "nullable": true + }, + "projectEventLocation": { + "$ref": "#/components/schemas/JustServe.Contracts.Vanilla.Projects.ProjectEventLocation" + }, + "projectEventRegions": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Vanilla.Geographies.CivicGeography" + }, + "nullable": true + }, + "projectRecurring": { + "$ref": "#/components/schemas/JustServe.Contracts.Vanilla.Projects.ProjectRecurring" + }, + "projectEvents": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Vanilla.Projects.ProjectEvent" + }, + "nullable": true + }, + "recurringDaysOfMonths": { + "type": "array", + "items": { + "type": "integer", + "format": "int32" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Vanilla.Projects.ProjectTimeOfDay": { + "type": "object", + "properties": { + "projectId": { + "type": "string", + "format": "uuid" + }, + "timeOfDayId": { + "type": "integer", + "format": "int32" + }, + "label": { + "type": "string", + "nullable": true + }, + "description": { + "type": "string", + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Vanilla.Projects.ProjectUserOwner": { + "type": "object", + "properties": { + "userId": { + "type": "string", + "format": "uuid" + }, + "projectId": { + "type": "string", + "format": "uuid" + }, + "user": { + "$ref": "#/components/schemas/JustServe.Contracts.Vanilla.Users.User" + }, + "project": { + "$ref": "#/components/schemas/JustServe.Contracts.Vanilla.Projects.Project" + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Vanilla.Projects.ProjectVolunteer": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "userId": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "name": { + "type": "string", + "nullable": true + }, + "projectEventId": { + "type": "string", + "format": "uuid" + }, + "email": { + "type": "string", + "nullable": true + }, + "phone": { + "type": "string", + "nullable": true + }, + "languageId": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "groupSize": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "schedule": { + "type": "string", + "nullable": true + }, + "dateInterested": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "volunteerDate": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "deleted": { + "type": "boolean" + }, + "deletedOn": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "deletedBy": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "note": { + "type": "string", + "nullable": true + }, + "userAddedHours": { + "type": "number", + "format": "double", + "nullable": true + }, + "adminReportedHours": { + "type": "number", + "format": "double", + "nullable": true + }, + "deletedByNavigation": { + "$ref": "#/components/schemas/JustServe.Contracts.Users.User" + }, + "projectEvent": { + "$ref": "#/components/schemas/JustServe.Contracts.Vanilla.Projects.ProjectEvent" + }, + "user": { + "$ref": "#/components/schemas/JustServe.Contracts.Users.User" + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Vanilla.Stories.SuccessStory": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "projectId": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "languageId": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "title": { + "type": "string", + "nullable": true + }, + "introduction": { + "type": "string", + "nullable": true + }, + "body": { + "type": "string", + "nullable": true + }, + "videoUrl": { + "type": "string", + "nullable": true + }, + "created": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "updated": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "createdBy": { + "type": "string", + "format": "uuid" + }, + "updatedBy": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "appendedInto": { + "type": "boolean", + "nullable": true + }, + "language": { + "$ref": "#/components/schemas/JustServe.Contracts.Enums.Lang" + }, + "createdByNavigation": { + "$ref": "#/components/schemas/JustServe.Contracts.Vanilla.Users.User" + }, + "project": { + "$ref": "#/components/schemas/JustServe.Contracts.Vanilla.Projects.Project" + }, + "updatedByNavigation": { + "$ref": "#/components/schemas/JustServe.Contracts.Vanilla.Users.User" + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Vanilla.Tags.Tag": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int32" + }, + "tagTypeId": { + "type": "integer", + "format": "int32" + }, + "tagType": { + "$ref": "#/components/schemas/JustServe.Contracts.Vanilla.Tags.TagType" + }, + "translations": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Vanilla.Tags.TagTranslation" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Vanilla.Tags.TagTranslation": { + "type": "object", + "properties": { + "tagId": { + "type": "integer", + "format": "int32" + }, + "languageId": { + "type": "integer", + "format": "int32" + }, + "tagTypeId": { + "type": "integer", + "format": "int32" + }, + "tagType": { + "$ref": "#/components/schemas/JustServe.Contracts.Vanilla.Tags.TagType" + }, + "label": { + "type": "string", + "nullable": true + }, + "description": { + "type": "string", + "nullable": true + }, + "tag": { + "$ref": "#/components/schemas/JustServe.Contracts.Vanilla.Tags.Tag" + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Vanilla.Tags.TagType": { + "enum": [ + "None", + "Skills", + "Interests", + "Tools", + "MetaKeyword" + ], + "type": "integer", + "format": "int32" + }, + "JustServe.Contracts.Vanilla.TimeZone.TimeZoneEnum": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int32" + }, + "timeZoneId": { + "type": "string", + "nullable": true + }, + "timeZoneName": { + "type": "string", + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Vanilla.Users.ChurchGeographyUserRole": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "churchGeographyId": { + "type": "string", + "format": "uuid" + }, + "userId": { + "type": "string", + "format": "uuid" + }, + "roleId": { + "type": "integer", + "format": "int32" + }, + "role": { + "$ref": "#/components/schemas/JustServe.Contracts.Enums.Role" + }, + "updated": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "updatedBy": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "created": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "createdBy": { + "type": "string", + "format": "uuid" + }, + "churchGeography": { + "$ref": "#/components/schemas/JustServe.Contracts.Vanilla.Geographies.ChurchGeography" + }, + "churchBoundaryCivics": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Vanilla.Geographies.ChurchBoundaryCivic" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Vanilla.Users.User": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "firstName": { + "type": "string", + "nullable": true + }, + "lastName": { + "type": "string", + "nullable": true + }, + "email": { + "type": "string", + "nullable": true + }, + "phone": { + "type": "string", + "nullable": true + }, + "languageId": { + "type": "integer", + "format": "int32" + }, + "radiusTypeId": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "active": { + "type": "boolean", + "nullable": true + }, + "unsubscribeDate": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "lockoutCount": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "lockoutDate": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "activationEmailLastNotified": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "activationEmailReminderCount": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "lastSignIn": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "created": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "updated": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "sponsorRole": { + "type": "boolean", + "nullable": true + }, + "viewedWhatsNewDate": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "personalInfoModifiedDate": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "notificationSettingsModifiedDate": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "searchPreferencesModifiedDate": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "locationModifiedDate": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "skillsModifiedDate": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "interestsModifiedDate": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "toolsModifiedDate": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "favoriteProjectModifiedDate": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "favoriteOrganizationModifiedDate": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "adminKeywords": { + "type": "string", + "nullable": true + }, + "clockPreference": { + "type": "integer", + "format": "int32" + }, + "createProjectRoleGranted": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "deleted": { + "type": "boolean" + }, + "deletedOn": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "deletedBy": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "churchGeographyUserRole": { + "$ref": "#/components/schemas/JustServe.Contracts.Vanilla.Users.ChurchGeographyUserRole" + }, + "userLocation": { + "$ref": "#/components/schemas/JustServe.Contracts.Vanilla.Users.UserLocation" + }, + "userNotificationPreference": { + "$ref": "#/components/schemas/JustServe.Contracts.Vanilla.Users.UserNotificationPreference" + }, + "userAuthentication": { + "$ref": "#/components/schemas/JustServe.Contracts.Vanilla.Users.UserAuthentication" + }, + "organizationUserRoles": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Vanilla.Organizations.OrganizationUserRole" + }, + "nullable": true + }, + "userChurchGeographyAdminLabels": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Vanilla.Users.UserChurchGeographyAdminLabel" + }, + "nullable": true + }, + "projectUserOwners": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Vanilla.Projects.ProjectUserOwner" + }, + "nullable": true + }, + "projectVolunteers": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Vanilla.Projects.ProjectVolunteer" + }, + "nullable": true + }, + "favoriteProjects": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Vanilla.Users.UserFavoriteProject" + }, + "nullable": true + }, + "favoriteOrganizations": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Vanilla.Users.UserFavoriteOrganization" + }, + "nullable": true + }, + "representativeOrganizations": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Vanilla.Organizations.Organization" + }, + "nullable": true + }, + "tags": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Contracts.Vanilla.Tags.Tag" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Vanilla.Users.UserAuthentication": { + "type": "object", + "properties": { + "userId": { + "type": "string", + "format": "uuid" + }, + "username": { + "type": "string", + "nullable": true + }, + "hasFacebookId": { + "type": "boolean" + }, + "hasGoogleUserId": { + "type": "boolean" + }, + "hasAppleUserId": { + "type": "boolean" + }, + "user": { + "$ref": "#/components/schemas/JustServe.Contracts.Vanilla.Users.User" + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Vanilla.Users.UserChurchGeographyAdminLabel": { + "type": "object", + "properties": { + "churchGeographyAdminLabelEnumId": { + "type": "string", + "format": "uuid" + }, + "userId": { + "type": "string", + "format": "uuid" + }, + "churchGeographyAdminLabelEnum": { + "$ref": "#/components/schemas/JustServe.Contracts.Vanilla.Geographies.ChurchGeographyAdminLabelEnum" + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Vanilla.Users.UserFavoriteOrganization": { + "type": "object", + "properties": { + "userId": { + "type": "string", + "format": "uuid" + }, + "organizationId": { + "type": "string", + "format": "uuid" + }, + "favoritedOn": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "organization": { + "$ref": "#/components/schemas/JustServe.Contracts.Vanilla.Organizations.Organization" + }, + "user": { + "$ref": "#/components/schemas/JustServe.Contracts.Vanilla.Users.User" + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Vanilla.Users.UserFavoriteProject": { + "type": "object", + "properties": { + "userId": { + "type": "string", + "format": "uuid" + }, + "projectId": { + "type": "string", + "format": "uuid" + }, + "favoritedOn": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "project": { + "$ref": "#/components/schemas/JustServe.Contracts.Vanilla.Projects.Project" + }, + "user": { + "$ref": "#/components/schemas/JustServe.Contracts.Vanilla.Users.User" + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Vanilla.Users.UserLocation": { + "type": "object", + "properties": { + "userId": { + "type": "string", + "format": "uuid" + }, + "displayAddress": { + "type": "string", + "nullable": true + }, + "displayAddress2": { + "type": "string", + "nullable": true + }, + "displayPostalCode": { + "type": "string", + "nullable": true + }, + "displayCity": { + "type": "string", + "nullable": true + }, + "displayNeighborhood": { + "type": "string", + "nullable": true + }, + "displayCounty": { + "type": "string", + "nullable": true + }, + "displayState": { + "type": "string", + "nullable": true + }, + "displayCountry": { + "type": "string", + "nullable": true + }, + "displayCountryCode": { + "type": "string", + "nullable": true + }, + "civicGeographyId": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "churchGeographyId": { + "type": "string", + "format": "uuid" + }, + "updated": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "latitude": { + "type": "number", + "format": "double", + "nullable": true + }, + "longitude": { + "type": "number", + "format": "double", + "nullable": true + }, + "maxLatitude": { + "type": "number", + "format": "double", + "nullable": true + }, + "minLatitude": { + "type": "number", + "format": "double", + "nullable": true + }, + "maxLongitude": { + "type": "number", + "format": "double", + "nullable": true + }, + "minLongitude": { + "type": "number", + "format": "double", + "nullable": true + }, + "churchGeography": { + "$ref": "#/components/schemas/JustServe.Contracts.Vanilla.Geographies.ChurchGeography" + }, + "civicGeography": { + "$ref": "#/components/schemas/JustServe.Contracts.Vanilla.Geographies.CivicGeography" + }, + "user": { + "$ref": "#/components/schemas/JustServe.Contracts.Vanilla.Users.User" + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Vanilla.Users.UserNotificationPreference": { + "type": "object", + "properties": { + "userId": { + "type": "string", + "format": "uuid" + }, + "generalNotificationOptIn": { + "type": "boolean", + "nullable": true + }, + "volunteerNewsletterRadius": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "volunteerNewsletter": { + "type": "boolean", + "nullable": true + }, + "recieveTexts": { + "type": "boolean", + "nullable": true + }, + "includeSponsorAdminInfo": { + "type": "boolean", + "nullable": true + }, + "notifyUpcomingVolunteeredProjects": { + "type": "boolean", + "nullable": true + }, + "notifyUpcommingVolunteeredProjectsDaysPrior": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "disasterReliefRegistrationSeen": { + "type": "boolean", + "nullable": true + }, + "donateDisasterReliefChecked": { + "type": "boolean", + "nullable": true + }, + "disasterReliefAvailability": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "volunteerForDisasterReliefChecked": { + "type": "boolean", + "nullable": true + }, + "generalMarketingOptIn": { + "type": "boolean", + "nullable": true + }, + "user": { + "$ref": "#/components/schemas/JustServe.Contracts.Vanilla.Users.User" + } + }, + "additionalProperties": false + }, + "JustServe.Contracts.Widget": { + "type": "object", + "properties": { + "id": { + "type": "string", + "nullable": true + }, + "ownerId": { + "type": "string", + "nullable": true + }, + "key": { + "type": "string", + "nullable": true + }, + "applicationName": { + "type": "string", + "nullable": true + }, + "applicationPath": { + "type": "string", + "nullable": true + }, + "contactEmail": { + "type": "string", + "nullable": true + }, + "contactPhone": { + "type": "string", + "nullable": true + }, + "analyticsURLTag": { + "type": "string", + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Entities.ApprovalLevelEnum": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int32" + }, + "label": { + "type": "string", + "nullable": true + }, + "description": { + "type": "string", + "nullable": true + }, + "projectApprovals": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.ProjectApproval" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Entities.Attachment": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "mimetype": { + "type": "string", + "nullable": true + }, + "hostedFilename": { + "type": "string", + "nullable": true + }, + "hostedThumbnailFilename": { + "type": "string", + "nullable": true + }, + "fileExtension": { + "type": "string", + "nullable": true + }, + "title": { + "type": "string", + "nullable": true + }, + "description": { + "type": "string", + "nullable": true + }, + "created": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "createdBy": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "hostedFolderPath": { + "type": "string", + "nullable": true + }, + "fileDisplayName": { + "type": "string", + "nullable": true + }, + "organizationAnnouncementAttachments": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.OrganizationAnnouncementAttachment" + }, + "nullable": true + }, + "organizationAttachments": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.OrganizationAttachment" + }, + "nullable": true + }, + "organizationGroupAttachments": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.OrganizationGroupAttachment" + }, + "nullable": true + }, + "projectAttachments": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.ProjectAttachment" + }, + "nullable": true + }, + "successStoryCarousels": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.SuccessStoryCarousel" + }, + "nullable": true + }, + "successStoryMedia": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.SuccessStoryMedium" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Entities.AttachmentTypeEnum": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int32" + }, + "label": { + "type": "string", + "nullable": true + }, + "description": { + "type": "string", + "nullable": true + }, + "organizationAttachments": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.OrganizationAttachment" + }, + "nullable": true + }, + "projectAttachments": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.ProjectAttachment" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Entities.Cause": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "organizationGroupId": { + "type": "string", + "format": "uuid" + }, + "name": { + "type": "string", + "nullable": true + }, + "imgName": { + "type": "string", + "nullable": true + }, + "description": { + "type": "string", + "nullable": true + }, + "organizationGroup": { + "$ref": "#/components/schemas/JustServe.Entities.OrganizationGroup" + }, + "causeProjects": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.CauseProject" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Entities.CauseProject": { + "type": "object", + "properties": { + "causeId": { + "type": "string", + "format": "uuid" + }, + "projectId": { + "type": "string", + "format": "uuid" + }, + "cause": { + "$ref": "#/components/schemas/JustServe.Entities.Cause" + }, + "project": { + "$ref": "#/components/schemas/JustServe.Entities.Project" + } + }, + "additionalProperties": false + }, + "JustServe.Entities.ChurchBoundaryCivic": { + "type": "object", + "properties": { + "churchGeographyUserRoleId": { + "type": "string", + "format": "uuid" + }, + "civicGeographyId": { + "type": "string", + "format": "uuid" + }, + "churchGeographyUserRole": { + "$ref": "#/components/schemas/JustServe.Entities.ChurchGeographyUserRole" + }, + "civicGeography": { + "$ref": "#/components/schemas/JustServe.Entities.CivicGeography" + } + }, + "additionalProperties": false + }, + "JustServe.Entities.ChurchGeography": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "typeId": { + "type": "integer", + "format": "int32" + }, + "updated": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "unitId": { + "type": "string", + "nullable": true + }, + "name": { + "type": "string", + "nullable": true + }, + "areaUnitId": { + "type": "string", + "nullable": true + }, + "missionUnitId": { + "type": "string", + "nullable": true + }, + "ccUnitId": { + "type": "string", + "nullable": true + }, + "stakeUnitId": { + "type": "string", + "nullable": true + }, + "active": { + "type": "boolean", + "nullable": true + }, + "countryId": { + "type": "string", + "format": "uuid" + }, + "stakeLatitude": { + "type": "number", + "format": "double", + "nullable": true + }, + "stakeLongitude": { + "type": "number", + "format": "double", + "nullable": true + }, + "maxLatitude": { + "type": "number", + "format": "double", + "nullable": true + }, + "minLatitude": { + "type": "number", + "format": "double", + "nullable": true + }, + "maxLongitude": { + "type": "number", + "format": "double", + "nullable": true + }, + "minLongitude": { + "type": "number", + "format": "double", + "nullable": true + }, + "mapId": { + "type": "string", + "nullable": true + }, + "coordinates": { + "$ref": "#/components/schemas/NetTopologySuite.Geometries.Point" + }, + "area": { + "$ref": "#/components/schemas/NetTopologySuite.Geometries.Polygon" + }, + "country": { + "$ref": "#/components/schemas/JustServe.Entities.CivicGeography" + }, + "type": { + "$ref": "#/components/schemas/JustServe.Entities.ChurchGeographyTypeEnum" + }, + "churchGeographyUserRoles": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.ChurchGeographyUserRole" + }, + "nullable": true + }, + "customNotificationChurchGeographies": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.CustomNotificationChurchGeography" + }, + "nullable": true + }, + "organizationLocations": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.OrganizationLocation" + }, + "nullable": true + }, + "projectEventLocations": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.ProjectEventLocation" + }, + "nullable": true + }, + "successStoryLocations": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.SuccessStoryLocation" + }, + "nullable": true + }, + "userLocations": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.UserLocation" + }, + "nullable": true + }, + "metrics": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.Metrics" + }, + "nullable": true + }, + "churchGeographyAdminLabelEnums": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.ChurchGeographyAdminLabelEnum" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Entities.ChurchGeographyAdminLabelEnum": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "churchGeographyId": { + "type": "string", + "format": "uuid" + }, + "name": { + "type": "string", + "nullable": true + }, + "description": { + "type": "string", + "nullable": true + }, + "created": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "updated": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "createdBy": { + "type": "string", + "format": "uuid" + }, + "updatedBy": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "deleted": { + "type": "boolean" + }, + "languageId": { + "type": "integer", + "format": "int32" + }, + "churchGeography": { + "$ref": "#/components/schemas/JustServe.Entities.ChurchGeography" + }, + "userChurchGeographyAdminLabelEnums": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.UserChurchGeographyAdminLabel" + }, + "nullable": true + }, + "language": { + "$ref": "#/components/schemas/JustServe.Entities.SupportedLanguage" + } + }, + "additionalProperties": false + }, + "JustServe.Entities.ChurchGeographyTypeEnum": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int32" + }, + "label": { + "type": "string", + "nullable": true + }, + "description": { + "type": "string", + "nullable": true + }, + "churchGeographies": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.ChurchGeography" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Entities.ChurchGeographyUserRole": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "churchGeographyId": { + "type": "string", + "format": "uuid" + }, + "userId": { + "type": "string", + "format": "uuid" + }, + "roleId": { + "type": "integer", + "format": "int32" + }, + "updated": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "updatedBy": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "created": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "createdBy": { + "type": "string", + "format": "uuid" + }, + "churchGeography": { + "$ref": "#/components/schemas/JustServe.Entities.ChurchGeography" + }, + "createdByNavigation": { + "$ref": "#/components/schemas/JustServe.Entities.User" + }, + "role": { + "$ref": "#/components/schemas/JustServe.Entities.RoleEnum" + }, + "updatedByNavigation": { + "$ref": "#/components/schemas/JustServe.Entities.User" + }, + "user": { + "$ref": "#/components/schemas/JustServe.Entities.User" + }, + "churchBoundaryCivics": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.ChurchBoundaryCivic" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Entities.CivicGeography": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "typeId": { + "type": "integer", + "format": "int32" + }, + "cityId": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "countyId": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "stateId": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "countryId": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "latitude": { + "type": "number", + "format": "double", + "nullable": true + }, + "longitude": { + "type": "number", + "format": "double", + "nullable": true + }, + "maxLatitude": { + "type": "number", + "format": "double", + "nullable": true + }, + "minLatitude": { + "type": "number", + "format": "double", + "nullable": true + }, + "maxLongitude": { + "type": "number", + "format": "double", + "nullable": true + }, + "minLongitude": { + "type": "number", + "format": "double", + "nullable": true + }, + "createdAt": { + "type": "string", + "format": "date-time" + }, + "mapId": { + "type": "string", + "nullable": true + }, + "name": { + "type": "string", + "nullable": true + }, + "code": { + "type": "string", + "nullable": true + }, + "coordinates": { + "$ref": "#/components/schemas/NetTopologySuite.Geometries.Point" + }, + "area": { + "$ref": "#/components/schemas/NetTopologySuite.Geometries.Polygon" + }, + "city": { + "$ref": "#/components/schemas/JustServe.Entities.CivicGeography" + }, + "country": { + "$ref": "#/components/schemas/JustServe.Entities.CivicGeography" + }, + "county": { + "$ref": "#/components/schemas/JustServe.Entities.CivicGeography" + }, + "state": { + "$ref": "#/components/schemas/JustServe.Entities.CivicGeography" + }, + "type": { + "$ref": "#/components/schemas/JustServe.Entities.CivicGeographyTypeEnum" + }, + "countryInfo": { + "$ref": "#/components/schemas/JustServe.Entities.CountryInfo" + }, + "churchBoundaryCivics": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.ChurchBoundaryCivic" + }, + "nullable": true + }, + "churchGeographies": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.ChurchGeography" + }, + "nullable": true + }, + "civicGeographyTranslationCivicGeographies": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.CivicGeographyTranslation" + }, + "nullable": true + }, + "civicGeographyTranslationCountries": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.CivicGeographyTranslation" + }, + "nullable": true + }, + "customNotificationRegions": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.CustomNotificationRegion" + }, + "nullable": true + }, + "inverseCity": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.CivicGeography" + }, + "nullable": true + }, + "inverseCountry": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.CivicGeography" + }, + "nullable": true + }, + "inverseCounty": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.CivicGeography" + }, + "nullable": true + }, + "inverseState": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.CivicGeography" + }, + "nullable": true + }, + "organizationBoundaryCivics": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.OrganizationBoundaryCivic" + }, + "nullable": true + }, + "organizationLocations": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.OrganizationLocation" + }, + "nullable": true + }, + "projectEventLocations": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.ProjectEventLocation" + }, + "nullable": true + }, + "projectEventRegions": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.ProjectEventRegion" + }, + "nullable": true + }, + "projectSearchStringCaches": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.ProjectSearchStringCache" + }, + "nullable": true + }, + "successStoryLocations": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.SuccessStoryLocation" + }, + "nullable": true + }, + "userLocations": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.UserLocation" + }, + "nullable": true + }, + "metrics": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.Metrics" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Entities.CivicGeographyTranslation": { + "type": "object", + "properties": { + "civicGeographyId": { + "type": "string", + "format": "uuid" + }, + "languageId": { + "type": "integer", + "format": "int32" + }, + "typeId": { + "type": "integer", + "format": "int32" + }, + "countryId": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "name": { + "type": "string", + "nullable": true + }, + "code": { + "type": "string", + "nullable": true + }, + "civicGeography": { + "$ref": "#/components/schemas/JustServe.Entities.CivicGeography" + }, + "country": { + "$ref": "#/components/schemas/JustServe.Entities.CivicGeography" + }, + "language": { + "$ref": "#/components/schemas/JustServe.Entities.SupportedLanguage" + }, + "type": { + "$ref": "#/components/schemas/JustServe.Entities.CivicGeographyTypeEnum" + } + }, + "additionalProperties": false + }, + "JustServe.Entities.CivicGeographyTypeEnum": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int32" + }, + "label": { + "type": "string", + "nullable": true + }, + "description": { + "type": "string", + "nullable": true + }, + "civicGeographies": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.CivicGeography" + }, + "nullable": true + }, + "civicGeographyTranslations": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.CivicGeographyTranslation" + }, + "nullable": true + }, + "projectEventRegions": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.ProjectEventRegion" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Entities.CountryInfo": { + "type": "object", + "properties": { + "countryId": { + "type": "string", + "format": "uuid" + }, + "defaultLanguageId": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "isLaunched": { + "type": "boolean", + "nullable": true + }, + "countryCode2": { + "type": "string", + "nullable": true + }, + "countryCode3": { + "type": "string", + "nullable": true + }, + "phoneCode": { + "type": "string", + "nullable": true + }, + "usePostal": { + "type": "boolean", + "nullable": true + }, + "useMetricUnits": { + "type": "boolean", + "nullable": true + }, + "twelveHourClock": { + "type": "boolean", + "nullable": true + }, + "hideStateData": { + "type": "boolean", + "nullable": true + }, + "hideCountyData": { + "type": "boolean", + "nullable": true + }, + "legalLogInAge": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "inEuropeanUnion": { + "type": "boolean", + "nullable": true + }, + "houseNumAfterStreet": { + "type": "boolean", + "nullable": true + }, + "postalValidationRegex": { + "type": "string", + "nullable": true + }, + "country": { + "$ref": "#/components/schemas/JustServe.Entities.CivicGeography" + }, + "defaultLanguage": { + "$ref": "#/components/schemas/JustServe.Entities.SupportedLanguage" + }, + "localeCountryInfos": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.LocaleCountryInfo" + }, + "nullable": true + }, + "postalGeographies": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.PostalGeography" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Entities.CustomNotification": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "typeId": { + "type": "integer", + "format": "int32" + }, + "levelId": { + "type": "integer", + "format": "int32" + }, + "title": { + "type": "string", + "nullable": true + }, + "description": { + "type": "string", + "nullable": true + }, + "languageId": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "redirectLink": { + "type": "string", + "nullable": true + }, + "startDate": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "endDate": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "adminOnly": { + "type": "boolean", + "nullable": true + }, + "created": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "updated": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "createdBy": { + "type": "string", + "format": "uuid" + }, + "updatedBy": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "projectEventId": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "createdByNavigation": { + "$ref": "#/components/schemas/JustServe.Entities.User" + }, + "language": { + "$ref": "#/components/schemas/JustServe.Entities.SupportedLanguage" + }, + "level": { + "$ref": "#/components/schemas/JustServe.Entities.NotificationLevelEnum" + }, + "projectEvent": { + "$ref": "#/components/schemas/JustServe.Entities.ProjectEvent" + }, + "type": { + "$ref": "#/components/schemas/JustServe.Entities.NotificationTypeEnum" + }, + "updatedByNavigation": { + "$ref": "#/components/schemas/JustServe.Entities.User" + }, + "customNotificationChurchGeographies": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.CustomNotificationChurchGeography" + }, + "nullable": true + }, + "customNotificationRegions": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.CustomNotificationRegion" + }, + "nullable": true + }, + "userNotifications": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.UserNotification" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Entities.CustomNotificationChurchGeography": { + "type": "object", + "properties": { + "churchGeographyId": { + "type": "string", + "format": "uuid" + }, + "customNotificationId": { + "type": "string", + "format": "uuid" + }, + "churchGeography": { + "$ref": "#/components/schemas/JustServe.Entities.ChurchGeography" + }, + "customNotification": { + "$ref": "#/components/schemas/JustServe.Entities.CustomNotification" + } + }, + "additionalProperties": false + }, + "JustServe.Entities.CustomNotificationRegion": { + "type": "object", + "properties": { + "civicGeographyId": { + "type": "string", + "format": "uuid" + }, + "customNotificationId": { + "type": "string", + "format": "uuid" + }, + "civicGeography": { + "$ref": "#/components/schemas/JustServe.Entities.CivicGeography" + }, + "customNotification": { + "$ref": "#/components/schemas/JustServe.Entities.CustomNotification" + } + }, + "additionalProperties": false + }, + "JustServe.Entities.DayOfWeekEnum": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int32" + }, + "label": { + "type": "string", + "nullable": true + }, + "description": { + "type": "string", + "nullable": true + }, + "projectDayOfWeeks": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.ProjectDayOfWeek" + }, + "nullable": true + }, + "userDayOfWeeks": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.UserDayOfWeek" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Entities.DistanceEnum": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int32" + }, + "label": { + "type": "string", + "nullable": true + }, + "description": { + "type": "string", + "nullable": true + }, + "users": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.User" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Entities.EmailLog": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "userId": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "sentFromEmail": { + "type": "string", + "nullable": true + }, + "sentToEmail": { + "type": "string", + "nullable": true + }, + "subject": { + "type": "string", + "nullable": true + }, + "languageId": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "typeId": { + "type": "integer", + "format": "int32" + }, + "created": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "language": { + "$ref": "#/components/schemas/JustServe.Entities.SupportedLanguage" + }, + "type": { + "$ref": "#/components/schemas/JustServe.Entities.EmailTypeEnum" + }, + "user": { + "$ref": "#/components/schemas/JustServe.Entities.User" + } + }, + "additionalProperties": false + }, + "JustServe.Entities.EmailTypeEnum": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int32" + }, + "label": { + "type": "string", + "nullable": true + }, + "description": { + "type": "string", + "nullable": true + }, + "emailLogs": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.EmailLog" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Entities.EndorsementStatusEnum": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int32" + }, + "label": { + "type": "string", + "nullable": true + }, + "description": { + "type": "string", + "nullable": true + }, + "organizationEndorsements": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.OrganizationEndorsement" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Entities.Language": { + "type": "object", + "properties": { + "languageId": { + "type": "integer", + "format": "int32" + }, + "name": { + "type": "string", + "nullable": true + }, + "iso6391Code": { + "type": "string", + "nullable": true + }, + "iso6392bCode": { + "type": "string", + "nullable": true + }, + "iso6392tCode": { + "type": "string", + "nullable": true + }, + "locales": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.Locale" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Entities.Locale": { + "type": "object", + "properties": { + "localeId": { + "type": "integer", + "format": "int32" + }, + "name": { + "type": "string", + "nullable": true + }, + "languageId": { + "type": "integer", + "format": "int32" + }, + "fallbackLocaleId": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "value": { + "type": "string", + "nullable": true + }, + "translationExists": { + "type": "boolean" + }, + "defaultLocale": { + "type": "boolean" + }, + "metaName": { + "type": "string", + "nullable": true + }, + "language": { + "$ref": "#/components/schemas/JustServe.Entities.Language" + }, + "localeMobile": { + "$ref": "#/components/schemas/JustServe.Entities.LocaleMobile" + }, + "localeCountryInfos": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.LocaleCountryInfo" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Entities.LocaleCountryInfo": { + "type": "object", + "properties": { + "localeId": { + "type": "integer", + "format": "int32" + }, + "countryId": { + "type": "string", + "format": "uuid" + }, + "country": { + "$ref": "#/components/schemas/JustServe.Entities.CountryInfo" + }, + "locale": { + "$ref": "#/components/schemas/JustServe.Entities.Locale" + } + }, + "additionalProperties": false + }, + "JustServe.Entities.LocaleMobile": { + "type": "object", + "properties": { + "localeMobileId": { + "type": "integer", + "format": "int32" + }, + "localeId": { + "type": "integer", + "format": "int32" + }, + "locale": { + "$ref": "#/components/schemas/JustServe.Entities.Locale" + } + }, + "additionalProperties": false + }, + "JustServe.Entities.LocationTypeEnum": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int32" + }, + "label": { + "type": "string", + "nullable": true + }, + "description": { + "type": "string", + "nullable": true + }, + "projects": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.Project" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Entities.MetricDateTypeEnum": { + "enum": [ + "Month", + "Day" + ], + "type": "integer", + "format": "int32" + }, + "JustServe.Entities.MetricTypeEnum": { + "enum": [ + "TotalUsers", + "ActiveUsers", + "NewUsers", + "TotalProjects", + "ActiveProjects", + "NewProjects", + "ProjectSignUps", + "ProjectRedirects", + "TotalOrganizations", + "OrganizationsWithActiveProjects", + "NewOrganizations" + ], + "type": "integer", + "format": "int32" + }, + "JustServe.Entities.Metrics": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "dateTypeId": { + "$ref": "#/components/schemas/JustServe.Entities.MetricDateTypeEnum" + }, + "metricTypeId": { + "$ref": "#/components/schemas/JustServe.Entities.MetricTypeEnum" + }, + "churchGeographyId": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "civicGeographyId": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "organizationId": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "date": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "month": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "year": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "count": { + "type": "integer", + "format": "int32" + }, + "updated": { + "type": "string", + "format": "date-time" + }, + "updatedBy": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "created": { + "type": "string", + "format": "date-time" + }, + "createdBy": { + "type": "string", + "format": "uuid" + }, + "churchGeography": { + "$ref": "#/components/schemas/JustServe.Entities.ChurchGeography" + }, + "civicGeography": { + "$ref": "#/components/schemas/JustServe.Entities.CivicGeography" + }, + "organization": { + "$ref": "#/components/schemas/JustServe.Entities.Organization" + }, + "createdByNavigation": { + "$ref": "#/components/schemas/JustServe.Entities.User" + }, + "updatedByNavigation": { + "$ref": "#/components/schemas/JustServe.Entities.User" + } + }, + "additionalProperties": false + }, + "JustServe.Entities.NotificationLevelEnum": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int32" + }, + "label": { + "type": "string", + "nullable": true + }, + "description": { + "type": "string", + "nullable": true + }, + "customNotifications": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.CustomNotification" + }, + "nullable": true + }, + "userNotifications": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.UserNotification" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Entities.NotificationStatusEnum": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int32" + }, + "label": { + "type": "string", + "nullable": true + }, + "description": { + "type": "string", + "nullable": true + }, + "userNotifications": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.UserNotification" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Entities.NotificationTypeEnum": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int32" + }, + "label": { + "type": "string", + "nullable": true + }, + "description": { + "type": "string", + "nullable": true + }, + "customNotifications": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.CustomNotification" + }, + "nullable": true + }, + "userNotifications": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.UserNotification" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Entities.Organization": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "languageId": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "name": { + "type": "string", + "nullable": true + }, + "description": { + "type": "string", + "nullable": true + }, + "statusId": { + "type": "integer", + "format": "int32" + }, + "typeId": { + "type": "integer", + "format": "int32" + }, + "defaultId": { + "type": "integer", + "format": "int32" + }, + "activationDate": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "website": { + "type": "string", + "nullable": true + }, + "autoRedirect": { + "type": "boolean", + "nullable": true + }, + "url": { + "type": "string", + "nullable": true + }, + "internalUrl": { + "type": "string", + "nullable": true + }, + "logo": { + "type": "string", + "nullable": true + }, + "banner": { + "type": "string", + "nullable": true + }, + "facebookPath": { + "type": "string", + "nullable": true + }, + "twitterPath": { + "type": "string", + "nullable": true + }, + "youtubePath": { + "type": "string", + "nullable": true + }, + "instagramPath": { + "type": "string", + "nullable": true + }, + "linkedinPath": { + "type": "string", + "nullable": true + }, + "created": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "updated": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "createdBy": { + "type": "string", + "format": "uuid" + }, + "updatedBy": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "aboutUs": { + "type": "string", + "nullable": true + }, + "contactName": { + "type": "string", + "nullable": true + }, + "contactPhone": { + "type": "string", + "nullable": true + }, + "contactEmail": { + "type": "string", + "nullable": true + }, + "deleted": { + "type": "boolean" + }, + "deletedOn": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "deletedBy": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "parentOrganizationId": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "isVerified": { + "type": "boolean" + }, + "createdByNavigation": { + "$ref": "#/components/schemas/JustServe.Entities.User" + }, + "deletedByNavigation": { + "$ref": "#/components/schemas/JustServe.Entities.User" + }, + "language": { + "$ref": "#/components/schemas/JustServe.Entities.SupportedLanguage" + }, + "status": { + "$ref": "#/components/schemas/JustServe.Entities.OrganizationStatusEnum" + }, + "type": { + "$ref": "#/components/schemas/JustServe.Entities.OrganizationTypeEnum" + }, + "updatedByNavigation": { + "$ref": "#/components/schemas/JustServe.Entities.User" + }, + "organizationGroup": { + "$ref": "#/components/schemas/JustServe.Entities.OrganizationGroup" + }, + "organizationLocation": { + "$ref": "#/components/schemas/JustServe.Entities.OrganizationLocation" + }, + "organizationRepresentative": { + "$ref": "#/components/schemas/JustServe.Entities.OrganizationRepresentative" + }, + "organizationAnnouncements": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.OrganizationAnnouncement" + }, + "nullable": true + }, + "organizationAttachments": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.OrganizationAttachment" + }, + "nullable": true + }, + "organizationEndorsements": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.OrganizationEndorsement" + }, + "nullable": true + }, + "organizationTags": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.OrganizationTag" + }, + "nullable": true + }, + "organizationUserRoles": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.OrganizationUserRole" + }, + "nullable": true + }, + "projectInOrganizations": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.ProjectInOrganization" + }, + "nullable": true + }, + "userFavoriteOrganizations": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.UserFavoriteOrganization" + }, + "nullable": true + }, + "userNotifications": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.UserNotification" + }, + "nullable": true + }, + "metrics": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.Metrics" + }, + "nullable": true + }, + "parentOrganization": { + "$ref": "#/components/schemas/JustServe.Entities.Organization" + }, + "childOrganizations": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.Organization" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Entities.OrganizationAnnouncement": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "organizationId": { + "type": "string", + "format": "uuid" + }, + "title": { + "type": "string", + "nullable": true + }, + "content": { + "type": "string", + "nullable": true + }, + "url": { + "type": "string", + "nullable": true + }, + "created": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "updated": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "createdBy": { + "type": "string", + "format": "uuid" + }, + "updatedBy": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "createdByNavigation": { + "$ref": "#/components/schemas/JustServe.Entities.User" + }, + "organization": { + "$ref": "#/components/schemas/JustServe.Entities.Organization" + }, + "updatedByNavigation": { + "$ref": "#/components/schemas/JustServe.Entities.User" + }, + "organizationAnnouncementAttachments": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.OrganizationAnnouncementAttachment" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Entities.OrganizationAnnouncementAttachment": { + "type": "object", + "properties": { + "organizationAnnouncementId": { + "type": "string", + "format": "uuid" + }, + "attachmentId": { + "type": "string", + "format": "uuid" + }, + "attachment": { + "$ref": "#/components/schemas/JustServe.Entities.Attachment" + }, + "organizationAnnouncement": { + "$ref": "#/components/schemas/JustServe.Entities.OrganizationAnnouncement" + } + }, + "additionalProperties": false + }, + "JustServe.Entities.OrganizationAttachment": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "format": "uuid" + }, + "attachmentId": { + "type": "string", + "format": "uuid" + }, + "attachmentTypeId": { + "type": "integer", + "format": "int32" + }, + "attachment": { + "$ref": "#/components/schemas/JustServe.Entities.Attachment" + }, + "organization": { + "$ref": "#/components/schemas/JustServe.Entities.Organization" + }, + "attachmentType": { + "$ref": "#/components/schemas/JustServe.Entities.AttachmentTypeEnum" + } + }, + "additionalProperties": false + }, + "JustServe.Entities.OrganizationBoundaryCivic": { + "type": "object", + "properties": { + "organizationUserRoleId": { + "type": "string", + "format": "uuid" + }, + "civicGeographyId": { + "type": "string", + "format": "uuid" + }, + "civicGeography": { + "$ref": "#/components/schemas/JustServe.Entities.CivicGeography" + }, + "organizationUserRole": { + "$ref": "#/components/schemas/JustServe.Entities.OrganizationUserRole" + } + }, + "additionalProperties": false + }, + "JustServe.Entities.OrganizationEndorsement": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "format": "uuid" + }, + "organizationGroupId": { + "type": "string", + "format": "uuid" + }, + "updated": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "statusId": { + "type": "integer", + "format": "int32" + }, + "organization": { + "$ref": "#/components/schemas/JustServe.Entities.Organization" + }, + "organizationGroup": { + "$ref": "#/components/schemas/JustServe.Entities.OrganizationGroup" + }, + "status": { + "$ref": "#/components/schemas/JustServe.Entities.EndorsementStatusEnum" + } + }, + "additionalProperties": false + }, + "JustServe.Entities.OrganizationGroup": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "format": "uuid" + }, + "typeId": { + "type": "integer", + "format": "int32" + }, + "unlisted": { + "type": "boolean", + "nullable": true + }, + "defaultId": { + "type": "integer", + "format": "int32" + }, + "organizationEnabled": { + "type": "boolean", + "nullable": true + }, + "projectsEnabled": { + "type": "boolean", + "nullable": true + }, + "questionsEnabled": { + "type": "boolean", + "nullable": true + }, + "aboutUsEnabled": { + "type": "boolean", + "nullable": true + }, + "giveEnabled": { + "type": "boolean", + "nullable": true + }, + "about": { + "type": "string", + "nullable": true + }, + "contactName": { + "type": "string", + "nullable": true + }, + "contactPhone": { + "type": "string", + "nullable": true + }, + "contactEmail": { + "type": "string", + "nullable": true + }, + "default": { + "$ref": "#/components/schemas/JustServe.Entities.SectionEnum" + }, + "organization": { + "$ref": "#/components/schemas/JustServe.Entities.Organization" + }, + "type": { + "$ref": "#/components/schemas/JustServe.Entities.OrganizationGroupTypeEnum" + }, + "causes": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.Cause" + }, + "nullable": true + }, + "organizationEndorsements": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.OrganizationEndorsement" + }, + "nullable": true + }, + "organizationGroupAttachments": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.OrganizationGroupAttachment" + }, + "nullable": true + }, + "organizationGroupDonationLinks": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.OrganizationGroupDonationLink" + }, + "nullable": true + }, + "organizationGroupFaqs": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.OrganizationGroupFaq" + }, + "nullable": true + }, + "organizationGroupTags": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.OrganizationGroupTag" + }, + "nullable": true + }, + "projectInOrganizationGroups": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.ProjectInOrganizationGroup" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Entities.OrganizationGroupAttachment": { + "type": "object", + "properties": { + "attachmentId": { + "type": "string", + "format": "uuid" + }, + "organizationGroupId": { + "type": "string", + "format": "uuid" + }, + "attachment": { + "$ref": "#/components/schemas/JustServe.Entities.Attachment" + }, + "organizationGroup": { + "$ref": "#/components/schemas/JustServe.Entities.OrganizationGroup" + } + }, + "additionalProperties": false + }, + "JustServe.Entities.OrganizationGroupDonationLink": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "organizationGroupId": { + "type": "string", + "format": "uuid" + }, + "linkName": { + "type": "string", + "nullable": true + }, + "description": { + "type": "string", + "nullable": true + }, + "url": { + "type": "string", + "nullable": true + }, + "order": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "organizationGroup": { + "$ref": "#/components/schemas/JustServe.Entities.OrganizationGroup" + } + }, + "additionalProperties": false + }, + "JustServe.Entities.OrganizationGroupFaq": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "organizationGroupId": { + "type": "string", + "format": "uuid" + }, + "question": { + "type": "string", + "nullable": true + }, + "answer": { + "type": "string", + "nullable": true + }, + "created": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "updated": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "createdBy": { + "type": "string", + "format": "uuid" + }, + "updatedBy": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "order": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "createdByNavigation": { + "$ref": "#/components/schemas/JustServe.Entities.User" + }, + "organizationGroup": { + "$ref": "#/components/schemas/JustServe.Entities.OrganizationGroup" + }, + "updatedByNavigation": { + "$ref": "#/components/schemas/JustServe.Entities.User" + } + }, + "additionalProperties": false + }, + "JustServe.Entities.OrganizationGroupTag": { + "type": "object", + "properties": { + "tagId": { + "type": "integer", + "format": "int32" + }, + "organizationGroupId": { + "type": "string", + "format": "uuid" + }, + "organizationGroup": { + "$ref": "#/components/schemas/JustServe.Entities.OrganizationGroup" + }, + "tag": { + "$ref": "#/components/schemas/JustServe.Entities.Tag" + } + }, + "additionalProperties": false + }, + "JustServe.Entities.OrganizationGroupTypeEnum": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int32" + }, + "label": { + "type": "string", + "nullable": true + }, + "description": { + "type": "string", + "nullable": true + }, + "organizationGroups": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.OrganizationGroup" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Entities.OrganizationLocation": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "format": "uuid" + }, + "displayAddress": { + "type": "string", + "nullable": true + }, + "displayAddress2": { + "type": "string", + "nullable": true + }, + "displayPostalCode": { + "type": "string", + "nullable": true + }, + "displayCity": { + "type": "string", + "nullable": true + }, + "displayNeighborhood": { + "type": "string", + "nullable": true + }, + "displayCounty": { + "type": "string", + "nullable": true + }, + "displayState": { + "type": "string", + "nullable": true + }, + "displayCountry": { + "type": "string", + "nullable": true + }, + "displayCountryCode": { + "type": "string", + "nullable": true + }, + "civicGeographyId": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "churchGeographyId": { + "type": "string", + "format": "uuid" + }, + "updated": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "latitude": { + "type": "number", + "format": "double", + "nullable": true + }, + "longitude": { + "type": "number", + "format": "double", + "nullable": true + }, + "maxLatitude": { + "type": "number", + "format": "double", + "nullable": true + }, + "minLatitude": { + "type": "number", + "format": "double", + "nullable": true + }, + "maxLongitude": { + "type": "number", + "format": "double", + "nullable": true + }, + "minLongitude": { + "type": "number", + "format": "double", + "nullable": true + }, + "coordinates": { + "$ref": "#/components/schemas/NetTopologySuite.Geometries.Point" + }, + "area": { + "$ref": "#/components/schemas/NetTopologySuite.Geometries.Polygon" + }, + "churchGeography": { + "$ref": "#/components/schemas/JustServe.Entities.ChurchGeography" + }, + "civicGeography": { + "$ref": "#/components/schemas/JustServe.Entities.CivicGeography" + }, + "organization": { + "$ref": "#/components/schemas/JustServe.Entities.Organization" + } + }, + "additionalProperties": false + }, + "JustServe.Entities.OrganizationRepresentative": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "format": "uuid" + }, + "justServeRepUserId": { + "type": "string", + "format": "uuid" + }, + "createdBy": { + "type": "string", + "format": "uuid" + }, + "created": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "updatedBy": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "updated": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "createdByNavigation": { + "$ref": "#/components/schemas/JustServe.Entities.User" + }, + "justServeRepUser": { + "$ref": "#/components/schemas/JustServe.Entities.User" + }, + "organization": { + "$ref": "#/components/schemas/JustServe.Entities.Organization" + }, + "updatedByNavigation": { + "$ref": "#/components/schemas/JustServe.Entities.User" + } + }, + "additionalProperties": false + }, + "JustServe.Entities.OrganizationStatusEnum": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int32" + }, + "label": { + "type": "string", + "nullable": true + }, + "description": { + "type": "string", + "nullable": true + }, + "organizations": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.Organization" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Entities.OrganizationTag": { + "type": "object", + "properties": { + "tagId": { + "type": "integer", + "format": "int32" + }, + "organizationId": { + "type": "string", + "format": "uuid" + }, + "organization": { + "$ref": "#/components/schemas/JustServe.Entities.Organization" + }, + "tag": { + "$ref": "#/components/schemas/JustServe.Entities.Tag" + } + }, + "additionalProperties": false + }, + "JustServe.Entities.OrganizationTypeEnum": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int32" + }, + "label": { + "type": "string", + "nullable": true + }, + "description": { + "type": "string", + "nullable": true + }, + "organizations": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.Organization" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Entities.OrganizationUserRole": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "organizationId": { + "type": "string", + "format": "uuid" + }, + "userId": { + "type": "string", + "format": "uuid" + }, + "roleId": { + "type": "integer", + "format": "int32" + }, + "updated": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "updatedBy": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "organization": { + "$ref": "#/components/schemas/JustServe.Entities.Organization" + }, + "role": { + "$ref": "#/components/schemas/JustServe.Entities.RoleEnum" + }, + "updatedByNavigation": { + "$ref": "#/components/schemas/JustServe.Entities.User" + }, + "user": { + "$ref": "#/components/schemas/JustServe.Entities.User" + }, + "organizationBoundaryCivics": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.OrganizationBoundaryCivic" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Entities.PostalGeography": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "zipcode": { + "type": "string", + "nullable": true + }, + "countryId": { + "type": "string", + "format": "uuid" + }, + "latitude": { + "type": "number", + "format": "double", + "nullable": true + }, + "longitude": { + "type": "number", + "format": "double", + "nullable": true + }, + "maxLatitude": { + "type": "number", + "format": "double", + "nullable": true + }, + "minLatitude": { + "type": "number", + "format": "double", + "nullable": true + }, + "maxLongitude": { + "type": "number", + "format": "double", + "nullable": true + }, + "minLongitude": { + "type": "number", + "format": "double", + "nullable": true + }, + "createdOn": { + "type": "string", + "format": "date-time" + }, + "mapId": { + "type": "string", + "nullable": true + }, + "coordinates": { + "$ref": "#/components/schemas/NetTopologySuite.Geometries.Point" + }, + "area": { + "$ref": "#/components/schemas/NetTopologySuite.Geometries.Polygon" + }, + "country": { + "$ref": "#/components/schemas/JustServe.Entities.CountryInfo" + } + }, + "additionalProperties": false + }, + "JustServe.Entities.Project": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "typeId": { + "type": "integer", + "format": "int32" + }, + "statusId": { + "type": "integer", + "format": "int32" + }, + "publishDate": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "title": { + "type": "string", + "nullable": true + }, + "shortDescription": { + "type": "string", + "nullable": true + }, + "longDescription": { + "type": "string", + "nullable": true + }, + "logo": { + "type": "string", + "nullable": true + }, + "contactName": { + "type": "string", + "nullable": true + }, + "contactPhone": { + "type": "string", + "nullable": true + }, + "contactEmail": { + "type": "string", + "nullable": true + }, + "sponsorUserId": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "sponsorTypeId": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "representativeUserId": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "waiverUrl": { + "type": "string", + "nullable": true + }, + "lastChangeReason": { + "type": "string", + "nullable": true + }, + "created": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "updated": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "createdBy": { + "type": "string", + "format": "uuid" + }, + "updatedBy": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "suitableAllAges": { + "type": "boolean", + "nullable": true + }, + "groupProjects": { + "type": "boolean", + "nullable": true + }, + "volunteerRemotely": { + "type": "boolean", + "nullable": true + }, + "volunteerFromAnywhere": { + "type": "boolean", + "nullable": true + }, + "itemDonations": { + "type": "boolean", + "nullable": true + }, + "wheelchairAccessible": { + "type": "boolean", + "nullable": true + }, + "indoors": { + "type": "boolean", + "nullable": true + }, + "forYouthGroups": { + "type": "boolean", + "nullable": true + }, + "unlisted": { + "type": "boolean", + "nullable": true + }, + "languageId": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "externalVolunteerUrl": { + "type": "string", + "nullable": true + }, + "external": { + "type": "boolean", + "nullable": true + }, + "archived": { + "type": "boolean" + }, + "deleted": { + "type": "boolean" + }, + "deletedOn": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "deletedBy": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "regionSelected": { + "type": "boolean" + }, + "firstStartDateTimeOffset": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "lastEndDateTimeOffset": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "countryCode": { + "type": "string", + "nullable": true + }, + "multipleTimes": { + "type": "boolean", + "nullable": true + }, + "allEventsFilled": { + "type": "boolean", + "nullable": true + }, + "locationTypeId": { + "type": "integer", + "format": "int32" + }, + "createdByNavigation": { + "$ref": "#/components/schemas/JustServe.Entities.User" + }, + "deletedByNavigation": { + "$ref": "#/components/schemas/JustServe.Entities.User" + }, + "language": { + "$ref": "#/components/schemas/JustServe.Entities.SupportedLanguage" + }, + "representativeUser": { + "$ref": "#/components/schemas/JustServe.Entities.User" + }, + "sponsorType": { + "$ref": "#/components/schemas/JustServe.Entities.SponsorTypeEnum" + }, + "sponsorUser": { + "$ref": "#/components/schemas/JustServe.Entities.User" + }, + "status": { + "$ref": "#/components/schemas/JustServe.Entities.ProjectStatusEnum" + }, + "type": { + "$ref": "#/components/schemas/JustServe.Entities.ProjectTypeEnum" + }, + "updatedByNavigation": { + "$ref": "#/components/schemas/JustServe.Entities.User" + }, + "projectApproval": { + "$ref": "#/components/schemas/JustServe.Entities.ProjectApproval" + }, + "projectRecurring": { + "$ref": "#/components/schemas/JustServe.Entities.ProjectRecurring" + }, + "causeProjects": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.CauseProject" + }, + "nullable": true + }, + "projectAttachments": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.ProjectAttachment" + }, + "nullable": true + }, + "projectDayOfWeeks": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.ProjectDayOfWeek" + }, + "nullable": true + }, + "projectEventLocations": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.ProjectEventLocation" + }, + "nullable": true + }, + "projectEventRegions": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.ProjectEventRegion" + }, + "nullable": true + }, + "projectEvents": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.ProjectEvent" + }, + "nullable": true + }, + "projectExternalVolunteerClicks": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.ProjectExternalVolunteerClick" + }, + "nullable": true + }, + "projectInOrganizationGroups": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.ProjectInOrganizationGroup" + }, + "nullable": true + }, + "projectInOrganizations": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.ProjectInOrganization" + }, + "nullable": true + }, + "projectTags": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.ProjectTag" + }, + "nullable": true + }, + "projectTimeOfDays": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.ProjectTimeOfDay" + }, + "nullable": true + }, + "projectUserOwners": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.ProjectUserOwner" + }, + "nullable": true + }, + "recordOfServices": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.RecordOfService" + }, + "nullable": true + }, + "successStories": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.SuccessStory" + }, + "nullable": true + }, + "userEmailProjects": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.UserEmailProject" + }, + "nullable": true + }, + "userFavoriteProjects": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.UserFavoriteProject" + }, + "nullable": true + }, + "userNotifications": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.UserNotification" + }, + "nullable": true + }, + "projectOwnerLog": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.ProjectOwnerLog" + }, + "nullable": true + }, + "locationType": { + "$ref": "#/components/schemas/JustServe.Entities.LocationTypeEnum" + } + }, + "additionalProperties": false + }, + "JustServe.Entities.ProjectApproval": { + "type": "object", + "properties": { + "projectId": { + "type": "string", + "format": "uuid" + }, + "applicantUserId": { + "type": "string", + "format": "uuid" + }, + "assignedOn": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "approverUserId": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "levelId": { + "type": "integer", + "format": "int32" + }, + "escalateDate": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "applicantUser": { + "$ref": "#/components/schemas/JustServe.Entities.User" + }, + "approverUser": { + "$ref": "#/components/schemas/JustServe.Entities.User" + }, + "level": { + "$ref": "#/components/schemas/JustServe.Entities.ApprovalLevelEnum" + }, + "project": { + "$ref": "#/components/schemas/JustServe.Entities.Project" + } + }, + "additionalProperties": false + }, + "JustServe.Entities.ProjectAttachment": { + "type": "object", + "properties": { + "attachmentId": { + "type": "string", + "format": "uuid" + }, + "projectId": { + "type": "string", + "format": "uuid" + }, + "attachmentTypeId": { + "type": "integer", + "format": "int32" + }, + "attachment": { + "$ref": "#/components/schemas/JustServe.Entities.Attachment" + }, + "project": { + "$ref": "#/components/schemas/JustServe.Entities.Project" + }, + "attachmentType": { + "$ref": "#/components/schemas/JustServe.Entities.AttachmentTypeEnum" + } + }, + "additionalProperties": false + }, + "JustServe.Entities.ProjectDayOfWeek": { + "type": "object", + "properties": { + "projectId": { + "type": "string", + "format": "uuid" + }, + "dayOfWeekId": { + "type": "integer", + "format": "int32" + }, + "dayOfWeek": { + "$ref": "#/components/schemas/JustServe.Entities.DayOfWeekEnum" + }, + "project": { + "$ref": "#/components/schemas/JustServe.Entities.Project" + } + }, + "additionalProperties": false + }, + "JustServe.Entities.ProjectEvent": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "projectId": { + "type": "string", + "format": "uuid" + }, + "start": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "end": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "renewDate": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "shiftTitle": { + "type": "string", + "nullable": true + }, + "volunteerCap": { + "type": "boolean" + }, + "groupCap": { + "type": "boolean" + }, + "groupLimit": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "totalVolunteersNeeded": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "locationName": { + "type": "string", + "nullable": true + }, + "locationLink": { + "type": "string", + "nullable": true + }, + "specialDirections": { + "type": "string", + "nullable": true + }, + "qrCodeImageLocation": { + "type": "string", + "nullable": true + }, + "schedule": { + "type": "string", + "nullable": true + }, + "projectEventLocationId": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "projectRecurringTimeId": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "deletedOn": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "deletedBy": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "deleted": { + "type": "boolean" + }, + "contactName": { + "type": "string", + "nullable": true + }, + "contactPhone": { + "type": "string", + "nullable": true + }, + "contactEmail": { + "type": "string", + "nullable": true + }, + "eventCapReached": { + "type": "boolean", + "nullable": true + }, + "startDateTimeOffset": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "endDateTimeOffset": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "timezone": { + "type": "string", + "nullable": true + }, + "timeZoneEnumId": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "statusId": { + "type": "integer", + "format": "int32" + }, + "deletedByNavigation": { + "$ref": "#/components/schemas/JustServe.Entities.User" + }, + "project": { + "$ref": "#/components/schemas/JustServe.Entities.Project" + }, + "projectEventLocation": { + "$ref": "#/components/schemas/JustServe.Entities.ProjectEventLocation" + }, + "projectRecurringTime": { + "$ref": "#/components/schemas/JustServe.Entities.ProjectRecurringTime" + }, + "customNotifications": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.CustomNotification" + }, + "nullable": true + }, + "projectEventRegions": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.ProjectEventRegion" + }, + "nullable": true + }, + "projectVolunteers": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.ProjectVolunteer" + }, + "nullable": true + }, + "userEmailProjects": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.UserEmailProject" + }, + "nullable": true + }, + "userNotifications": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.UserNotification" + }, + "nullable": true + }, + "status": { + "$ref": "#/components/schemas/JustServe.Entities.ProjectEventStatusEnum" + }, + "timeZoneEnum": { + "$ref": "#/components/schemas/JustServe.Entities.TimeZoneEnum" + } + }, + "additionalProperties": false + }, + "JustServe.Entities.ProjectEventLocation": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "displayAddress": { + "type": "string", + "nullable": true + }, + "displayAddress2": { + "type": "string", + "nullable": true + }, + "displayPostalCode": { + "type": "string", + "nullable": true + }, + "displayCity": { + "type": "string", + "nullable": true + }, + "displayNeighborhood": { + "type": "string", + "nullable": true + }, + "displayCounty": { + "type": "string", + "nullable": true + }, + "displayState": { + "type": "string", + "nullable": true + }, + "displayCountry": { + "type": "string", + "nullable": true + }, + "displayCountryCode": { + "type": "string", + "nullable": true + }, + "locationName": { + "type": "string", + "nullable": true + }, + "locationDetails": { + "type": "string", + "nullable": true + }, + "civicGeographyId": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "churchGeographyId": { + "type": "string", + "format": "uuid" + }, + "updated": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "latitude": { + "type": "number", + "format": "double", + "nullable": true + }, + "longitude": { + "type": "number", + "format": "double", + "nullable": true + }, + "projectId": { + "type": "string", + "format": "uuid" + }, + "maxLatitude": { + "type": "number", + "format": "double", + "nullable": true + }, + "minLatitude": { + "type": "number", + "format": "double", + "nullable": true + }, + "maxLongitude": { + "type": "number", + "format": "double", + "nullable": true + }, + "minLongitude": { + "type": "number", + "format": "double", + "nullable": true + }, + "timezone": { + "type": "string", + "nullable": true + }, + "timeZoneEnumId": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "coordinates": { + "$ref": "#/components/schemas/NetTopologySuite.Geometries.Point" + }, + "area": { + "$ref": "#/components/schemas/NetTopologySuite.Geometries.Polygon" + }, + "churchGeography": { + "$ref": "#/components/schemas/JustServe.Entities.ChurchGeography" + }, + "civicGeography": { + "$ref": "#/components/schemas/JustServe.Entities.CivicGeography" + }, + "project": { + "$ref": "#/components/schemas/JustServe.Entities.Project" + }, + "projectEvents": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.ProjectEvent" + }, + "nullable": true + }, + "projectRecurringTimes": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.ProjectRecurringTime" + }, + "nullable": true + }, + "timeZoneEnum": { + "$ref": "#/components/schemas/JustServe.Entities.TimeZoneEnum" + } + }, + "additionalProperties": false + }, + "JustServe.Entities.ProjectEventRegion": { + "type": "object", + "properties": { + "civicGeographyId": { + "type": "string", + "format": "uuid" + }, + "typeId": { + "type": "integer", + "format": "int32" + }, + "id": { + "type": "string", + "format": "uuid" + }, + "projectId": { + "type": "string", + "format": "uuid" + }, + "projectEventId": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "civicGeography": { + "$ref": "#/components/schemas/JustServe.Entities.CivicGeography" + }, + "project": { + "$ref": "#/components/schemas/JustServe.Entities.Project" + }, + "projectEvent": { + "$ref": "#/components/schemas/JustServe.Entities.ProjectEvent" + }, + "type": { + "$ref": "#/components/schemas/JustServe.Entities.CivicGeographyTypeEnum" + }, + "projectRecurringTimes": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.ProjectRecurringTime" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Entities.ProjectEventStatusEnum": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int32" + }, + "label": { + "type": "string", + "nullable": true + }, + "description": { + "type": "string", + "nullable": true + }, + "projectEvents": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.ProjectEvent" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Entities.ProjectExternalVolunteerClick": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int32" + }, + "projectId": { + "type": "string", + "format": "uuid" + }, + "clickDate": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "project": { + "$ref": "#/components/schemas/JustServe.Entities.Project" + } + }, + "additionalProperties": false + }, + "JustServe.Entities.ProjectInOrganization": { + "type": "object", + "properties": { + "projectId": { + "type": "string", + "format": "uuid" + }, + "organizationId": { + "type": "string", + "format": "uuid" + }, + "reviewedBy": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "reviewedDate": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "organization": { + "$ref": "#/components/schemas/JustServe.Entities.Organization" + }, + "project": { + "$ref": "#/components/schemas/JustServe.Entities.Project" + }, + "reviewedByNavigation": { + "$ref": "#/components/schemas/JustServe.Entities.User" + } + }, + "additionalProperties": false + }, + "JustServe.Entities.ProjectInOrganizationGroup": { + "type": "object", + "properties": { + "projectId": { + "type": "string", + "format": "uuid" + }, + "organizationGroupId": { + "type": "string", + "format": "uuid" + }, + "organizationGroup": { + "$ref": "#/components/schemas/JustServe.Entities.OrganizationGroup" + }, + "project": { + "$ref": "#/components/schemas/JustServe.Entities.Project" + } + }, + "additionalProperties": false + }, + "JustServe.Entities.ProjectOwnerLog": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "projectId": { + "type": "string", + "format": "uuid" + }, + "ownerUserId": { + "type": "string", + "format": "uuid" + }, + "ownerUserFirstName": { + "type": "string", + "nullable": true + }, + "ownerUserLastName": { + "type": "string", + "nullable": true + }, + "updated": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "updatedBy": { + "type": "string", + "nullable": true + }, + "owner": { + "$ref": "#/components/schemas/JustServe.Entities.User" + }, + "project": { + "$ref": "#/components/schemas/JustServe.Entities.Project" + } + }, + "additionalProperties": false + }, + "JustServe.Entities.ProjectRecurring": { + "type": "object", + "properties": { + "projectRecurringId": { + "type": "string", + "format": "uuid" + }, + "projectId": { + "type": "string", + "format": "uuid" + }, + "startDate": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "endDate": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "startDateTimeOffset": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "endDateTimeOffset": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "specialDirections": { + "type": "string", + "nullable": true + }, + "project": { + "$ref": "#/components/schemas/JustServe.Entities.Project" + }, + "projectRecurringTimes": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.ProjectRecurringTime" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Entities.ProjectRecurringTime": { + "type": "object", + "properties": { + "projectRecurringTimeId": { + "type": "string", + "format": "uuid" + }, + "projectRecurringId": { + "type": "string", + "format": "uuid" + }, + "recurringTypeEnumId": { + "type": "integer", + "format": "int32" + }, + "startTime": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "endTime": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "volunteersCapped": { + "type": "boolean" + }, + "groupsCapped": { + "type": "boolean" + }, + "groupLimit": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "volunteersNeeded": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "sunday": { + "type": "boolean" + }, + "monday": { + "type": "boolean" + }, + "tuesday": { + "type": "boolean" + }, + "wednesday": { + "type": "boolean" + }, + "thursday": { + "type": "boolean" + }, + "friday": { + "type": "boolean" + }, + "saturday": { + "type": "boolean" + }, + "firstWeek": { + "type": "boolean" + }, + "secondWeek": { + "type": "boolean" + }, + "thirdWeek": { + "type": "boolean" + }, + "fourthWeek": { + "type": "boolean" + }, + "fifthWeek": { + "type": "boolean" + }, + "lastWeek": { + "type": "boolean" + }, + "projectEventLocationId": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "projectEventRegionId": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "contactName": { + "type": "string", + "nullable": true + }, + "contactPhone": { + "type": "string", + "nullable": true + }, + "contactEmail": { + "type": "string", + "nullable": true + }, + "startTimeFormatted": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "endTimeFormatted": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "specialDirections": { + "type": "string", + "nullable": true + }, + "locationName": { + "type": "string", + "nullable": true + }, + "locationLink": { + "type": "string", + "nullable": true + }, + "projectEventLocation": { + "$ref": "#/components/schemas/JustServe.Entities.ProjectEventLocation" + }, + "projectEventRegion": { + "$ref": "#/components/schemas/JustServe.Entities.ProjectEventRegion" + }, + "projectRecurring": { + "$ref": "#/components/schemas/JustServe.Entities.ProjectRecurring" + }, + "recurringTypeEnum": { + "$ref": "#/components/schemas/JustServe.Entities.RecurringTypeEnum" + }, + "projectEvents": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.ProjectEvent" + }, + "nullable": true + }, + "recurringDaysOfMonths": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.RecurringDaysOfMonth" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Entities.ProjectSearchStringCache": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int32" + }, + "searchString": { + "type": "string", + "nullable": true + }, + "civicGeographyId": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "browserLocale": { + "type": "string", + "nullable": true + }, + "latitude": { + "type": "number", + "format": "double", + "nullable": true + }, + "longitude": { + "type": "number", + "format": "double", + "nullable": true + }, + "civicGeography": { + "$ref": "#/components/schemas/JustServe.Entities.CivicGeography" + } + }, + "additionalProperties": false + }, + "JustServe.Entities.ProjectStatusEnum": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int32" + }, + "label": { + "type": "string", + "nullable": true + }, + "description": { + "type": "string", + "nullable": true + }, + "projects": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.Project" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Entities.ProjectTag": { + "type": "object", + "properties": { + "projectId": { + "type": "string", + "format": "uuid" + }, + "tagId": { + "type": "integer", + "format": "int32" + }, + "project": { + "$ref": "#/components/schemas/JustServe.Entities.Project" + }, + "tag": { + "$ref": "#/components/schemas/JustServe.Entities.Tag" + } + }, + "additionalProperties": false + }, + "JustServe.Entities.ProjectTimeOfDay": { + "type": "object", + "properties": { + "projectId": { + "type": "string", + "format": "uuid" + }, + "timeOfDayId": { + "type": "integer", + "format": "int32" + }, + "project": { + "$ref": "#/components/schemas/JustServe.Entities.Project" + }, + "timeOfDay": { + "$ref": "#/components/schemas/JustServe.Entities.TimeOfDayEnum" + } + }, + "additionalProperties": false + }, + "JustServe.Entities.ProjectTypeEnum": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int32" + }, + "label": { + "type": "string", + "nullable": true + }, + "description": { + "type": "string", + "nullable": true + }, + "projects": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.Project" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Entities.ProjectUserOwner": { + "type": "object", + "properties": { + "userId": { + "type": "string", + "format": "uuid" + }, + "projectId": { + "type": "string", + "format": "uuid" + }, + "project": { + "$ref": "#/components/schemas/JustServe.Entities.Project" + }, + "user": { + "$ref": "#/components/schemas/JustServe.Entities.User" + } + }, + "additionalProperties": false + }, + "JustServe.Entities.ProjectVolunteer": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "userId": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "name": { + "type": "string", + "nullable": true + }, + "projectEventId": { + "type": "string", + "format": "uuid" + }, + "email": { + "type": "string", + "nullable": true + }, + "phone": { + "type": "string", + "nullable": true + }, + "languageId": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "groupSize": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "schedule": { + "type": "string", + "nullable": true + }, + "dateInterested": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "volunteerDate": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "deleted": { + "type": "boolean" + }, + "deletedOn": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "deletedBy": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "note": { + "type": "string", + "nullable": true + }, + "deletedByNavigation": { + "$ref": "#/components/schemas/JustServe.Entities.User" + }, + "language": { + "$ref": "#/components/schemas/JustServe.Entities.SupportedLanguage" + }, + "projectEvent": { + "$ref": "#/components/schemas/JustServe.Entities.ProjectEvent" + }, + "user": { + "$ref": "#/components/schemas/JustServe.Entities.User" + }, + "projectVolunteerHours": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.ProjectVolunteerHour" + }, + "nullable": true + }, + "projectVolunteerTags": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.ProjectVolunteerTag" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Entities.ProjectVolunteerHour": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "volunteerId": { + "type": "string", + "format": "uuid" + }, + "userAddedHours": { + "type": "number", + "format": "double", + "nullable": true + }, + "adminReportedHours": { + "type": "number", + "format": "double", + "nullable": true + }, + "volunteerDate": { + "type": "string", + "format": "date", + "nullable": true + }, + "volunteer": { + "$ref": "#/components/schemas/JustServe.Entities.ProjectVolunteer" + } + }, + "additionalProperties": false + }, + "JustServe.Entities.ProjectVolunteerTag": { + "type": "object", + "properties": { + "projectVolunteerId": { + "type": "string", + "format": "uuid" + }, + "tagId": { + "type": "integer", + "format": "int32" + }, + "projectVolunteer": { + "$ref": "#/components/schemas/JustServe.Entities.ProjectVolunteer" + }, + "tag": { + "$ref": "#/components/schemas/JustServe.Entities.Tag" + } + }, + "additionalProperties": false + }, + "JustServe.Entities.QuickSearch": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "userId": { + "type": "string", + "format": "uuid" + }, + "title": { + "type": "string", + "nullable": true + }, + "searchTypeId": { + "type": "integer", + "format": "int32" + }, + "searchParameters": { + "type": "string", + "nullable": true + }, + "created": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "user": { + "$ref": "#/components/schemas/JustServe.Entities.User" + } + }, + "additionalProperties": false + }, + "JustServe.Entities.RecordOfService": { + "type": "object", + "properties": { + "recordOfServiceId": { + "type": "string", + "format": "uuid" + }, + "hoursServed": { + "type": "number", + "format": "double", + "nullable": true + }, + "organizationName": { + "type": "string", + "nullable": true + }, + "projectId": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "projectName": { + "type": "string", + "nullable": true + }, + "userId": { + "type": "string", + "format": "uuid" + }, + "volunteeredOn": { + "type": "string", + "format": "date-time" + }, + "deleted": { + "type": "boolean" + }, + "deletedOn": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "deletedBy": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "deletedByNavigation": { + "$ref": "#/components/schemas/JustServe.Entities.User" + }, + "project": { + "$ref": "#/components/schemas/JustServe.Entities.Project" + }, + "user": { + "$ref": "#/components/schemas/JustServe.Entities.User" + } + }, + "additionalProperties": false + }, + "JustServe.Entities.RecurringDaysOfMonth": { + "type": "object", + "properties": { + "projectRecurringTimeId": { + "type": "string", + "format": "uuid" + }, + "dayOfMonth": { + "type": "integer", + "format": "int32" + }, + "projectRecurringTime": { + "$ref": "#/components/schemas/JustServe.Entities.ProjectRecurringTime" + } + }, + "additionalProperties": false + }, + "JustServe.Entities.RecurringTypeEnum": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int32" + }, + "label": { + "type": "string", + "nullable": true + }, + "description": { + "type": "string", + "nullable": true + }, + "projectRecurringTimes": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.ProjectRecurringTime" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Entities.RefreshToken": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "subject": { + "type": "string", + "nullable": true + }, + "clientId": { + "type": "string", + "nullable": true + }, + "userId": { + "type": "string", + "format": "uuid" + }, + "issuedUtc": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "expiresUtc": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "user": { + "$ref": "#/components/schemas/JustServe.Entities.User" + } + }, + "additionalProperties": false + }, + "JustServe.Entities.Resource": { + "type": "object", + "properties": { + "resourceId": { + "type": "string", + "format": "uuid" + }, + "languageId": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "title": { + "type": "string", + "nullable": true + }, + "description": { + "type": "string", + "nullable": true + }, + "typeId": { + "type": "integer", + "format": "int32" + }, + "thumbnailImage": { + "type": "string", + "nullable": true + }, + "linkView": { + "type": "string", + "nullable": true + }, + "linkDownload": { + "type": "string", + "nullable": true + }, + "linkDownloadInternational": { + "type": "string", + "nullable": true + }, + "linkPrintFriendly": { + "type": "string", + "nullable": true + }, + "sizeMb": { + "type": "number", + "format": "double", + "nullable": true + }, + "order": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "language": { + "$ref": "#/components/schemas/JustServe.Entities.SupportedLanguage" + }, + "type": { + "$ref": "#/components/schemas/JustServe.Entities.ResourceTypeEnum" + } + }, + "additionalProperties": false + }, + "JustServe.Entities.ResourceTypeEnum": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int32" + }, + "label": { + "type": "string", + "nullable": true + }, + "description": { + "type": "string", + "nullable": true + }, + "resources": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.Resource" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Entities.RoleEnum": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int32" + }, + "label": { + "type": "string", + "nullable": true + }, + "description": { + "type": "string", + "nullable": true + }, + "churchGeographyUserRoles": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.ChurchGeographyUserRole" + }, + "nullable": true + }, + "organizationUserRoles": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.OrganizationUserRole" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Entities.SectionEnum": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int32" + }, + "label": { + "type": "string", + "nullable": true + }, + "description": { + "type": "string", + "nullable": true + }, + "organizationGroups": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.OrganizationGroup" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Entities.SponsorTypeEnum": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int32" + }, + "label": { + "type": "string", + "nullable": true + }, + "description": { + "type": "string", + "nullable": true + }, + "projects": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.Project" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Entities.SuccessMediaTypeEnum": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int32" + }, + "label": { + "type": "string", + "nullable": true + }, + "description": { + "type": "string", + "nullable": true + }, + "successStoryMedia": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.SuccessStoryMedium" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Entities.SuccessStory": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "projectId": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "languageId": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "title": { + "type": "string", + "nullable": true + }, + "introduction": { + "type": "string", + "nullable": true + }, + "body": { + "type": "string", + "nullable": true + }, + "videoUrl": { + "type": "string", + "nullable": true + }, + "created": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "updated": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "createdBy": { + "type": "string", + "format": "uuid" + }, + "updatedBy": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "appendedInto": { + "type": "boolean", + "nullable": true + }, + "createdByNavigation": { + "$ref": "#/components/schemas/JustServe.Entities.User" + }, + "language": { + "$ref": "#/components/schemas/JustServe.Entities.SupportedLanguage" + }, + "project": { + "$ref": "#/components/schemas/JustServe.Entities.Project" + }, + "updatedByNavigation": { + "$ref": "#/components/schemas/JustServe.Entities.User" + }, + "successStoryLocation": { + "$ref": "#/components/schemas/JustServe.Entities.SuccessStoryLocation" + }, + "successStoryCarousels": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.SuccessStoryCarousel" + }, + "nullable": true + }, + "successStoryMedia": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.SuccessStoryMedium" + }, + "nullable": true + }, + "successStoryTags": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.SuccessStoryTag" + }, + "nullable": true + }, + "successStoryUserOwners": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.SuccessStoryUserOwner" + }, + "nullable": true + }, + "userNotifications": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.UserNotification" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Entities.SuccessStoryCarousel": { + "type": "object", + "properties": { + "successStoryId": { + "type": "string", + "format": "uuid" + }, + "attachmentId": { + "type": "string", + "format": "uuid" + }, + "attachment": { + "$ref": "#/components/schemas/JustServe.Entities.Attachment" + }, + "successStory": { + "$ref": "#/components/schemas/JustServe.Entities.SuccessStory" + } + }, + "additionalProperties": false + }, + "JustServe.Entities.SuccessStoryLocation": { + "type": "object", + "properties": { + "successStoryId": { + "type": "string", + "format": "uuid" + }, + "displayAddress": { + "type": "string", + "nullable": true + }, + "displayAddress2": { + "type": "string", + "nullable": true + }, + "displayPostalCode": { + "type": "string", + "nullable": true + }, + "displayCity": { + "type": "string", + "nullable": true + }, + "displayNeighborhood": { + "type": "string", + "nullable": true + }, + "displayCounty": { + "type": "string", + "nullable": true + }, + "displayState": { + "type": "string", + "nullable": true + }, + "displayCountry": { + "type": "string", + "nullable": true + }, + "displayCountryCode": { + "type": "string", + "nullable": true + }, + "civicGeographyId": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "churchGeographyId": { + "type": "string", + "format": "uuid" + }, + "updated": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "latitude": { + "type": "number", + "format": "double", + "nullable": true + }, + "longitude": { + "type": "number", + "format": "double", + "nullable": true + }, + "maxLatitude": { + "type": "number", + "format": "double", + "nullable": true + }, + "minLatitude": { + "type": "number", + "format": "double", + "nullable": true + }, + "maxLongitude": { + "type": "number", + "format": "double", + "nullable": true + }, + "minLongitude": { + "type": "number", + "format": "double", + "nullable": true + }, + "churchGeography": { + "$ref": "#/components/schemas/JustServe.Entities.ChurchGeography" + }, + "civicGeography": { + "$ref": "#/components/schemas/JustServe.Entities.CivicGeography" + }, + "successStory": { + "$ref": "#/components/schemas/JustServe.Entities.SuccessStory" + } + }, + "additionalProperties": false + }, + "JustServe.Entities.SuccessStoryMedium": { + "type": "object", + "properties": { + "successStoryId": { + "type": "string", + "format": "uuid" + }, + "attachmentId": { + "type": "string", + "format": "uuid" + }, + "typeId": { + "type": "integer", + "format": "int32" + }, + "attachment": { + "$ref": "#/components/schemas/JustServe.Entities.Attachment" + }, + "successStory": { + "$ref": "#/components/schemas/JustServe.Entities.SuccessStory" + }, + "type": { + "$ref": "#/components/schemas/JustServe.Entities.SuccessMediaTypeEnum" + } + }, + "additionalProperties": false + }, + "JustServe.Entities.SuccessStoryTag": { + "type": "object", + "properties": { + "successStoryId": { + "type": "string", + "format": "uuid" + }, + "tagId": { + "type": "integer", + "format": "int32" + }, + "successStory": { + "$ref": "#/components/schemas/JustServe.Entities.SuccessStory" + }, + "tag": { + "$ref": "#/components/schemas/JustServe.Entities.Tag" + } + }, + "additionalProperties": false + }, + "JustServe.Entities.SuccessStoryUserOwner": { + "type": "object", + "properties": { + "userId": { + "type": "string", + "format": "uuid" + }, + "successStoryId": { + "type": "string", + "format": "uuid" + }, + "successStory": { + "$ref": "#/components/schemas/JustServe.Entities.SuccessStory" + }, + "user": { + "$ref": "#/components/schemas/JustServe.Entities.User" + } + }, + "additionalProperties": false + }, + "JustServe.Entities.SupportedLanguage": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int32" + }, + "label": { + "type": "string", + "nullable": true + }, + "supportStartDate": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "supportEndDate": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "twoCharCode": { + "type": "string", + "nullable": true + }, + "threeCharCode": { + "type": "string", + "nullable": true + }, + "fiveCharCode": { + "type": "string", + "nullable": true + }, + "metaName": { + "type": "string", + "nullable": true + }, + "languageConfig": { + "type": "string", + "nullable": true + }, + "civicGeographyTranslations": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.CivicGeographyTranslation" + }, + "nullable": true + }, + "countryInfos": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.CountryInfo" + }, + "nullable": true + }, + "customNotifications": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.CustomNotification" + }, + "nullable": true + }, + "emailLogs": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.EmailLog" + }, + "nullable": true + }, + "organizations": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.Organization" + }, + "nullable": true + }, + "projectVolunteers": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.ProjectVolunteer" + }, + "nullable": true + }, + "projects": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.Project" + }, + "nullable": true + }, + "resources": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.Resource" + }, + "nullable": true + }, + "successStories": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.SuccessStory" + }, + "nullable": true + }, + "tagSubcategoryTranslations": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.TagSubcategoryTranslation" + }, + "nullable": true + }, + "tagTranslations": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.TagTranslation" + }, + "nullable": true + }, + "tagTypeTranslations": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.TagTypeTranslation" + }, + "nullable": true + }, + "users": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.User" + }, + "nullable": true + }, + "churchGeographyAdminLabelEnums": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.ChurchGeographyAdminLabelEnum" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Entities.Tag": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int32" + }, + "tagTypeId": { + "type": "integer", + "format": "int32" + }, + "tagSubcategoryId": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "tagSubcategory": { + "$ref": "#/components/schemas/JustServe.Entities.TagSubcategoryTypeEnum" + }, + "tagType": { + "$ref": "#/components/schemas/JustServe.Entities.TagType" + }, + "organizationGroupTags": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.OrganizationGroupTag" + }, + "nullable": true + }, + "organizationTags": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.OrganizationTag" + }, + "nullable": true + }, + "projectTags": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.ProjectTag" + }, + "nullable": true + }, + "successStoryTags": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.SuccessStoryTag" + }, + "nullable": true + }, + "tagTranslations": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.TagTranslation" + }, + "nullable": true + }, + "userTags": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.UserTag" + }, + "nullable": true + }, + "projectVolunteerTags": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.ProjectVolunteerTag" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Entities.TagSubcategoryTranslation": { + "type": "object", + "properties": { + "tagSubcategoryId": { + "type": "integer", + "format": "int32" + }, + "languageId": { + "type": "integer", + "format": "int32" + }, + "label": { + "type": "string", + "nullable": true + }, + "description": { + "type": "string", + "nullable": true + }, + "language": { + "$ref": "#/components/schemas/JustServe.Entities.SupportedLanguage" + }, + "tagSubcategory": { + "$ref": "#/components/schemas/JustServe.Entities.TagSubcategoryTypeEnum" + } + }, + "additionalProperties": false + }, + "JustServe.Entities.TagSubcategoryTypeEnum": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int32" + }, + "tagTypeId": { + "type": "integer", + "format": "int32" + }, + "tagType": { + "$ref": "#/components/schemas/JustServe.Entities.TagType" + }, + "tagSubcategoryTranslations": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.TagSubcategoryTranslation" + }, + "nullable": true + }, + "tags": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.Tag" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Entities.TagTranslation": { + "type": "object", + "properties": { + "tagId": { + "type": "integer", + "format": "int32" + }, + "languageId": { + "type": "integer", + "format": "int32" + }, + "tagTypeId": { + "type": "integer", + "format": "int32" + }, + "label": { + "type": "string", + "nullable": true + }, + "description": { + "type": "string", + "nullable": true + }, + "language": { + "$ref": "#/components/schemas/JustServe.Entities.SupportedLanguage" + }, + "tag": { + "$ref": "#/components/schemas/JustServe.Entities.Tag" + }, + "tagType": { + "$ref": "#/components/schemas/JustServe.Entities.TagType" + } + }, + "additionalProperties": false + }, + "JustServe.Entities.TagType": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int32" + }, + "tagSubcategoryTypeEnums": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.TagSubcategoryTypeEnum" + }, + "nullable": true + }, + "tagTranslations": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.TagTranslation" + }, + "nullable": true + }, + "tagTypeTranslations": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.TagTypeTranslation" + }, + "nullable": true + }, + "tags": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.Tag" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Entities.TagTypeTranslation": { + "type": "object", + "properties": { + "tagTypeId": { + "type": "integer", + "format": "int32" + }, + "languageId": { + "type": "integer", + "format": "int32" + }, + "label": { + "type": "string", + "nullable": true + }, + "description": { + "type": "string", + "nullable": true + }, + "language": { + "$ref": "#/components/schemas/JustServe.Entities.SupportedLanguage" + }, + "tagType": { + "$ref": "#/components/schemas/JustServe.Entities.TagType" + } + }, + "additionalProperties": false + }, + "JustServe.Entities.TimeOfDayEnum": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int32" + }, + "label": { + "type": "string", + "nullable": true + }, + "description": { + "type": "string", + "nullable": true + }, + "projectTimeOfDays": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.ProjectTimeOfDay" + }, + "nullable": true + }, + "userTimeOfDays": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.UserTimeOfDay" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Entities.TimeZoneEnum": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int32" + }, + "timeZoneId": { + "type": "string", + "nullable": true + }, + "timeZoneName": { + "type": "string", + "nullable": true + }, + "projectEvents": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.ProjectEvent" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Entities.User": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "firstName": { + "type": "string", + "nullable": true + }, + "lastName": { + "type": "string", + "nullable": true + }, + "email": { + "type": "string", + "nullable": true + }, + "phone": { + "type": "string", + "nullable": true + }, + "languageId": { + "type": "integer", + "format": "int32" + }, + "radiusTypeId": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "active": { + "type": "boolean", + "nullable": true + }, + "unsubscribeDate": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "lockoutCount": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "lockoutDate": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "activationEmailLastNotified": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "activationEmailReminderCount": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "lastSignIn": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "created": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "updated": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "sponsorRole": { + "type": "boolean", + "nullable": true + }, + "viewedWhatsNewDate": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "personalInfoModifiedDate": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "notificationSettingsModifiedDate": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "searchPreferencesModifiedDate": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "locationModifiedDate": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "skillsModifiedDate": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "interestsModifiedDate": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "toolsModifiedDate": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "favoriteProjectModifiedDate": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "favoriteOrganizationModifiedDate": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "adminKeywords": { + "type": "string", + "nullable": true + }, + "clockPreference": { + "type": "integer", + "format": "int32" + }, + "createProjectRoleGranted": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "deleted": { + "type": "boolean" + }, + "deletedOn": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "deletedBy": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "deletedByNavigation": { + "$ref": "#/components/schemas/JustServe.Entities.User" + }, + "language": { + "$ref": "#/components/schemas/JustServe.Entities.SupportedLanguage" + }, + "radiusType": { + "$ref": "#/components/schemas/JustServe.Entities.DistanceEnum" + }, + "churchGeographyUserRoleUser": { + "$ref": "#/components/schemas/JustServe.Entities.ChurchGeographyUserRole" + }, + "userAuthentication": { + "$ref": "#/components/schemas/JustServe.Entities.UserAuthentication" + }, + "userLocation": { + "$ref": "#/components/schemas/JustServe.Entities.UserLocation" + }, + "userNotificationPreference": { + "$ref": "#/components/schemas/JustServe.Entities.UserNotificationPreference" + }, + "userSearchPreference": { + "$ref": "#/components/schemas/JustServe.Entities.UserSearchPreference" + }, + "churchGeographyUserRoleCreatedByNavigations": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.ChurchGeographyUserRole" + }, + "nullable": true + }, + "churchGeographyUserRoleUpdatedByNavigations": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.ChurchGeographyUserRole" + }, + "nullable": true + }, + "customNotificationCreatedByNavigations": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.CustomNotification" + }, + "nullable": true + }, + "customNotificationUpdatedByNavigations": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.CustomNotification" + }, + "nullable": true + }, + "emailLogs": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.EmailLog" + }, + "nullable": true + }, + "inverseDeletedByNavigation": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.User" + }, + "nullable": true + }, + "organizationAnnouncementCreatedByNavigations": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.OrganizationAnnouncement" + }, + "nullable": true + }, + "organizationAnnouncementUpdatedByNavigations": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.OrganizationAnnouncement" + }, + "nullable": true + }, + "organizationCreatedByNavigations": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.Organization" + }, + "nullable": true + }, + "organizationDeletedByNavigations": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.Organization" + }, + "nullable": true + }, + "organizationGroupFaqCreatedByNavigations": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.OrganizationGroupFaq" + }, + "nullable": true + }, + "organizationGroupFaqUpdatedByNavigations": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.OrganizationGroupFaq" + }, + "nullable": true + }, + "organizationRepresentativeCreatedByNavigations": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.OrganizationRepresentative" + }, + "nullable": true + }, + "organizationRepresentativeJustServeRepUsers": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.OrganizationRepresentative" + }, + "nullable": true + }, + "organizationRepresentativeUpdatedByNavigations": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.OrganizationRepresentative" + }, + "nullable": true + }, + "organizationUpdatedByNavigations": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.Organization" + }, + "nullable": true + }, + "organizationUserRoleUpdatedByNavigations": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.OrganizationUserRole" + }, + "nullable": true + }, + "organizationUserRoleUsers": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.OrganizationUserRole" + }, + "nullable": true + }, + "projectApprovalApplicantUsers": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.ProjectApproval" + }, + "nullable": true + }, + "projectApprovalApproverUsers": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.ProjectApproval" + }, + "nullable": true + }, + "projectCreatedByNavigations": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.Project" + }, + "nullable": true + }, + "projectDeletedByNavigations": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.Project" + }, + "nullable": true + }, + "projectEvents": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.ProjectEvent" + }, + "nullable": true + }, + "projectInOrganizations": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.ProjectInOrganization" + }, + "nullable": true + }, + "projectRepresentativeUsers": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.Project" + }, + "nullable": true + }, + "projectSponsorUsers": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.Project" + }, + "nullable": true + }, + "projectUpdatedByNavigations": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.Project" + }, + "nullable": true + }, + "projectUserOwners": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.ProjectUserOwner" + }, + "nullable": true + }, + "projectVolunteerDeletedByNavigations": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.ProjectVolunteer" + }, + "nullable": true + }, + "projectVolunteerUsers": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.ProjectVolunteer" + }, + "nullable": true + }, + "recordOfServiceDeletedByNavigations": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.RecordOfService" + }, + "nullable": true + }, + "recordOfServiceUsers": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.RecordOfService" + }, + "nullable": true + }, + "refreshTokens": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.RefreshToken" + }, + "nullable": true + }, + "successStoryCreatedByNavigations": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.SuccessStory" + }, + "nullable": true + }, + "successStoryUpdatedByNavigations": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.SuccessStory" + }, + "nullable": true + }, + "successStoryUserOwners": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.SuccessStoryUserOwner" + }, + "nullable": true + }, + "userDayOfWeeks": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.UserDayOfWeek" + }, + "nullable": true + }, + "userEmailProjectContentUsers": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.UserEmailProject" + }, + "nullable": true + }, + "userEmailProjectRecipientUsers": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.UserEmailProject" + }, + "nullable": true + }, + "userFavoriteOrganizations": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.UserFavoriteOrganization" + }, + "nullable": true + }, + "userFavoriteProjects": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.UserFavoriteProject" + }, + "nullable": true + }, + "userLoginHistories": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.UserLoginHistory" + }, + "nullable": true + }, + "userNotificationBoundaryAdminUsers": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.UserNotification" + }, + "nullable": true + }, + "userNotificationUsers": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.UserNotification" + }, + "nullable": true + }, + "userProjectSearchLogs": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.UserProjectSearchLog" + }, + "nullable": true + }, + "userTags": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.UserTag" + }, + "nullable": true + }, + "userTimeOfDays": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.UserTimeOfDay" + }, + "nullable": true + }, + "widgets": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.Widget" + }, + "nullable": true + }, + "projectOwnerLog": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.ProjectOwnerLog" + }, + "nullable": true + }, + "quickSearches": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.QuickSearch" + }, + "nullable": true + }, + "metricsCreatedByNavigations": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.Metrics" + }, + "nullable": true + }, + "metricsUpdatedByNavigations": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.Metrics" + }, + "nullable": true + }, + "userChurchGeographyAdminLabels": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.UserChurchGeographyAdminLabel" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Entities.UserAuthentication": { + "type": "object", + "properties": { + "userId": { + "type": "string", + "format": "uuid" + }, + "username": { + "type": "string", + "nullable": true + }, + "password": { + "type": "string", + "nullable": true + }, + "facebookId": { + "type": "string", + "nullable": true + }, + "facebookZipCodeNotified": { + "type": "boolean", + "nullable": true + }, + "googleUserId": { + "type": "string", + "nullable": true + }, + "appleUserId": { + "type": "string", + "nullable": true + }, + "salt": { + "type": "string", + "nullable": true + }, + "user": { + "$ref": "#/components/schemas/JustServe.Entities.User" + } + }, + "additionalProperties": false + }, + "JustServe.Entities.UserChurchGeographyAdminLabel": { + "type": "object", + "properties": { + "churchGeographyAdminLabelEnumId": { + "type": "string", + "format": "uuid" + }, + "userId": { + "type": "string", + "format": "uuid" + }, + "churchGeographyAdminLabelEnum": { + "$ref": "#/components/schemas/JustServe.Entities.ChurchGeographyAdminLabelEnum" + }, + "user": { + "$ref": "#/components/schemas/JustServe.Entities.User" + } + }, + "additionalProperties": false + }, + "JustServe.Entities.UserDayOfWeek": { + "type": "object", + "properties": { + "userId": { + "type": "string", + "format": "uuid" + }, + "dayOfWeekId": { + "type": "integer", + "format": "int32" + }, + "dayOfWeek": { + "$ref": "#/components/schemas/JustServe.Entities.DayOfWeekEnum" + }, + "user": { + "$ref": "#/components/schemas/JustServe.Entities.User" + } + }, + "additionalProperties": false + }, + "JustServe.Entities.UserEmailProject": { + "type": "object", + "properties": { + "userEmailProjectId": { + "type": "integer", + "format": "int32" + }, + "projectId": { + "type": "string", + "format": "uuid" + }, + "projectEventId": { + "type": "string", + "format": "uuid" + }, + "recipientUserId": { + "type": "string", + "format": "uuid" + }, + "contentUserId": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "emailSent": { + "type": "boolean", + "nullable": true + }, + "typeId": { + "type": "integer", + "format": "int32" + }, + "addedDate": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "sentDate": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "contentUser": { + "$ref": "#/components/schemas/JustServe.Entities.User" + }, + "project": { + "$ref": "#/components/schemas/JustServe.Entities.Project" + }, + "projectEvent": { + "$ref": "#/components/schemas/JustServe.Entities.ProjectEvent" + }, + "recipientUser": { + "$ref": "#/components/schemas/JustServe.Entities.User" + }, + "type": { + "$ref": "#/components/schemas/JustServe.Entities.UserEmailProjectTypeEnum" + } + }, + "additionalProperties": false + }, + "JustServe.Entities.UserEmailProjectTypeEnum": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int32" + }, + "label": { + "type": "string", + "nullable": true + }, + "description": { + "type": "string", + "nullable": true + }, + "userEmailProjects": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.UserEmailProject" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "JustServe.Entities.UserFavoriteOrganization": { + "type": "object", + "properties": { + "userId": { + "type": "string", + "format": "uuid" + }, + "organizationId": { + "type": "string", + "format": "uuid" + }, + "favoritedOn": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "organization": { + "$ref": "#/components/schemas/JustServe.Entities.Organization" + }, + "user": { + "$ref": "#/components/schemas/JustServe.Entities.User" + } + }, + "additionalProperties": false + }, + "JustServe.Entities.UserFavoriteProject": { + "type": "object", + "properties": { + "userId": { + "type": "string", + "format": "uuid" + }, + "projectId": { + "type": "string", + "format": "uuid" + }, + "favoritedOn": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "project": { + "$ref": "#/components/schemas/JustServe.Entities.Project" + }, + "user": { + "$ref": "#/components/schemas/JustServe.Entities.User" + } + }, + "additionalProperties": false + }, + "JustServe.Entities.UserLocation": { + "type": "object", + "properties": { + "userId": { + "type": "string", + "format": "uuid" + }, + "displayAddress": { + "type": "string", + "nullable": true + }, + "displayAddress2": { + "type": "string", + "nullable": true + }, + "displayPostalCode": { + "type": "string", + "nullable": true + }, + "displayCity": { + "type": "string", + "nullable": true + }, + "displayNeighborhood": { + "type": "string", + "nullable": true + }, + "displayCounty": { + "type": "string", + "nullable": true + }, + "displayState": { + "type": "string", + "nullable": true + }, + "displayCountry": { + "type": "string", + "nullable": true + }, + "displayCountryCode": { + "type": "string", + "nullable": true + }, + "civicGeographyId": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "churchGeographyId": { + "type": "string", + "format": "uuid" + }, + "updated": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "latitude": { + "type": "number", + "format": "double", + "nullable": true + }, + "longitude": { + "type": "number", + "format": "double", + "nullable": true + }, + "maxLatitude": { + "type": "number", + "format": "double", + "nullable": true + }, + "minLatitude": { + "type": "number", + "format": "double", + "nullable": true + }, + "maxLongitude": { + "type": "number", + "format": "double", + "nullable": true + }, + "minLongitude": { + "type": "number", + "format": "double", + "nullable": true + }, + "coordinates": { + "$ref": "#/components/schemas/NetTopologySuite.Geometries.Point" + }, + "area": { + "$ref": "#/components/schemas/NetTopologySuite.Geometries.Polygon" + }, + "churchGeography": { + "$ref": "#/components/schemas/JustServe.Entities.ChurchGeography" + }, + "civicGeography": { + "$ref": "#/components/schemas/JustServe.Entities.CivicGeography" + }, + "user": { + "$ref": "#/components/schemas/JustServe.Entities.User" + } + }, + "additionalProperties": false + }, + "JustServe.Entities.UserLoginHistory": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "userId": { + "type": "string", + "format": "uuid" + }, + "loginAt": { + "type": "string", + "format": "date-time" + }, + "user": { + "$ref": "#/components/schemas/JustServe.Entities.User" + } + }, + "additionalProperties": false + }, + "JustServe.Entities.UserNotification": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "userId": { + "type": "string", + "format": "uuid" + }, + "typeId": { + "type": "integer", + "format": "int32" + }, + "levelId": { + "type": "integer", + "format": "int32" + }, + "statusId": { + "type": "integer", + "format": "int32" + }, + "createdDate": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "showStartDate": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "showEndDate": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "title": { + "type": "string", + "nullable": true + }, + "projectId": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "projectEventId": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "successStoryId": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "organizationId": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "boundaryAdminUserId": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "customNotificationId": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "boundaryAdminUser": { + "$ref": "#/components/schemas/JustServe.Entities.User" + }, + "customNotification": { + "$ref": "#/components/schemas/JustServe.Entities.CustomNotification" + }, + "level": { + "$ref": "#/components/schemas/JustServe.Entities.NotificationLevelEnum" + }, + "organization": { + "$ref": "#/components/schemas/JustServe.Entities.Organization" + }, + "project": { + "$ref": "#/components/schemas/JustServe.Entities.Project" + }, + "projectEvent": { + "$ref": "#/components/schemas/JustServe.Entities.ProjectEvent" + }, + "status": { + "$ref": "#/components/schemas/JustServe.Entities.NotificationStatusEnum" + }, + "successStory": { + "$ref": "#/components/schemas/JustServe.Entities.SuccessStory" + }, + "type": { + "$ref": "#/components/schemas/JustServe.Entities.NotificationTypeEnum" + }, + "user": { + "$ref": "#/components/schemas/JustServe.Entities.User" + } + }, + "additionalProperties": false + }, + "JustServe.Entities.UserNotificationPreference": { + "type": "object", + "properties": { + "userId": { + "type": "string", + "format": "uuid" + }, + "generalNotificationOptIn": { + "type": "boolean", + "nullable": true + }, + "volunteerNewsletterRadius": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "volunteerNewsletter": { + "type": "boolean", + "nullable": true + }, + "recieveTexts": { + "type": "boolean", + "nullable": true + }, + "includeSponsorAdminInfo": { + "type": "boolean", + "nullable": true + }, + "notifyUpcomingVolunteeredProjects": { + "type": "boolean", + "nullable": true + }, + "notifyUpcommingVolunteeredProjectsDaysPrior": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "disasterReliefRegistrationSeen": { + "type": "boolean", + "nullable": true + }, + "donateDisasterReliefChecked": { + "type": "boolean", + "nullable": true + }, + "disasterReliefAvailability": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "volunteerForDisasterReliefChecked": { + "type": "boolean", + "nullable": true + }, + "generalMarketingOptIn": { + "type": "boolean", + "nullable": true + }, + "user": { + "$ref": "#/components/schemas/JustServe.Entities.User" + } + }, + "additionalProperties": false + }, + "JustServe.Entities.UserProjectSearchLog": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "userId": { + "type": "string", + "format": "uuid" + }, + "searchedOn": { + "type": "string", + "format": "date-time" + }, + "keywords": { + "type": "string", + "nullable": true + }, + "locationSearch": { + "type": "string", + "nullable": true + }, + "radius": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "user": { + "$ref": "#/components/schemas/JustServe.Entities.User" + } + }, + "additionalProperties": false + }, + "JustServe.Entities.UserSearchPreference": { + "type": "object", + "properties": { + "userId": { + "type": "string", + "format": "uuid" + }, + "suitableAllAges": { + "type": "boolean", + "nullable": true + }, + "groupProject": { + "type": "boolean", + "nullable": true + }, + "volunteerRemotely": { + "type": "boolean", + "nullable": true + }, + "itemDonations": { + "type": "boolean", + "nullable": true + }, + "wheelchairAccessible": { + "type": "boolean", + "nullable": true + }, + "indoors": { + "type": "boolean", + "nullable": true + }, + "youthGroups": { + "type": "boolean", + "nullable": true + }, + "user": { + "$ref": "#/components/schemas/JustServe.Entities.User" + } + }, + "additionalProperties": false + }, + "JustServe.Entities.UserTag": { + "type": "object", + "properties": { + "userId": { + "type": "string", + "format": "uuid" + }, + "tagId": { + "type": "integer", + "format": "int32" + }, + "tag": { + "$ref": "#/components/schemas/JustServe.Entities.Tag" + }, + "user": { + "$ref": "#/components/schemas/JustServe.Entities.User" + } + }, + "additionalProperties": false + }, + "JustServe.Entities.UserTimeOfDay": { + "type": "object", + "properties": { + "userId": { + "type": "string", + "format": "uuid" + }, + "timeOfDayId": { + "type": "integer", + "format": "int32" + }, + "timeOfDay": { + "$ref": "#/components/schemas/JustServe.Entities.TimeOfDayEnum" + }, + "user": { + "$ref": "#/components/schemas/JustServe.Entities.User" + } + }, + "additionalProperties": false + }, + "JustServe.Entities.Widget": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "ownerId": { + "type": "string", + "format": "uuid" + }, + "key": { + "type": "string", + "nullable": true + }, + "applicationName": { + "type": "string", + "nullable": true + }, + "applicationPath": { + "type": "string", + "nullable": true + }, + "contactEmail": { + "type": "string", + "nullable": true + }, + "contactPhone": { + "type": "string", + "nullable": true + }, + "analyticsUrlTag": { + "type": "string", + "nullable": true + }, + "typeId": { + "type": "integer", + "format": "int32" + }, + "owner": { + "$ref": "#/components/schemas/JustServe.Entities.User" + }, + "type": { + "$ref": "#/components/schemas/JustServe.Entities.WidgetTypeEnum" + } + }, + "additionalProperties": false + }, + "JustServe.Entities.WidgetTypeEnum": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int32" + }, + "label": { + "type": "string", + "nullable": true + }, + "description": { + "type": "string", + "nullable": true + }, + "widgets": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JustServe.Entities.Widget" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "Microsoft.AspNetCore.Mvc.ActionResult": { + "type": "object", + "additionalProperties": false + }, + "Microsoft.AspNetCore.Mvc.ActionResult`1[[JustServe.Entities.UserNotificationPreference, JustServe.Entities, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]": { + "type": "object", + "properties": { + "result": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ActionResult" + }, + "value": { + "$ref": "#/components/schemas/JustServe.Entities.UserNotificationPreference" + } + }, + "additionalProperties": false + }, + "NetTopologySuite.Geometries.Coordinate": { + "type": "object", + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + }, + "m": { + "type": "number", + "format": "double" + }, + "coordinateValue": { + "$ref": "#/components/schemas/NetTopologySuite.Geometries.Coordinate" + }, + "isValid": { + "type": "boolean", + "readOnly": true + } + }, + "additionalProperties": false + }, + "NetTopologySuite.Geometries.CoordinateEqualityComparer": { + "type": "object", + "additionalProperties": false + }, + "NetTopologySuite.Geometries.CoordinateSequence": { + "type": "object", + "properties": { + "dimension": { + "type": "integer", + "format": "int32", + "readOnly": true + }, + "measures": { + "type": "integer", + "format": "int32", + "readOnly": true + }, + "spatial": { + "type": "integer", + "format": "int32", + "readOnly": true + }, + "ordinates": { + "$ref": "#/components/schemas/NetTopologySuite.Geometries.Ordinates" + }, + "hasZ": { + "type": "boolean", + "readOnly": true + }, + "hasM": { + "type": "boolean", + "readOnly": true + }, + "zOrdinateIndex": { + "type": "integer", + "format": "int32", + "readOnly": true + }, + "mOrdinateIndex": { + "type": "integer", + "format": "int32", + "readOnly": true + }, + "first": { + "$ref": "#/components/schemas/NetTopologySuite.Geometries.Coordinate" + }, + "last": { + "$ref": "#/components/schemas/NetTopologySuite.Geometries.Coordinate" + }, + "count": { + "type": "integer", + "format": "int32", + "readOnly": true + } + }, + "additionalProperties": false + }, + "NetTopologySuite.Geometries.CoordinateSequenceFactory": { + "type": "object", + "properties": { + "ordinates": { + "$ref": "#/components/schemas/NetTopologySuite.Geometries.Ordinates" + } + }, + "additionalProperties": false + }, + "NetTopologySuite.Geometries.Dimension": { + "enum": [ + "Point", + "P", + "Curve", + "L", + "Surface", + "A", + "Collapse", + "Dontcare", + "True", + "False", + "Unknown" + ], + "type": "integer", + "format": "int32" + }, + "NetTopologySuite.Geometries.Envelope": { + "type": "object", + "properties": { + "isNull": { + "type": "boolean", + "readOnly": true + }, + "width": { + "type": "number", + "format": "double", + "readOnly": true + }, + "height": { + "type": "number", + "format": "double", + "readOnly": true + }, + "diameter": { + "type": "number", + "format": "double", + "readOnly": true + }, + "minX": { + "type": "number", + "format": "double", + "readOnly": true + }, + "maxX": { + "type": "number", + "format": "double", + "readOnly": true + }, + "minY": { + "type": "number", + "format": "double", + "readOnly": true + }, + "maxY": { + "type": "number", + "format": "double", + "readOnly": true + }, + "area": { + "type": "number", + "format": "double", + "readOnly": true + }, + "minExtent": { + "type": "number", + "format": "double", + "readOnly": true + }, + "maxExtent": { + "type": "number", + "format": "double", + "readOnly": true + }, + "centre": { + "$ref": "#/components/schemas/NetTopologySuite.Geometries.Coordinate" + } + }, + "additionalProperties": false + }, + "NetTopologySuite.Geometries.Geometry": { + "type": "object", + "properties": { + "factory": { + "$ref": "#/components/schemas/NetTopologySuite.Geometries.GeometryFactory" + }, + "userData": { + "nullable": true + }, + "srid": { + "type": "integer", + "format": "int32" + }, + "geometryType": { + "type": "string", + "nullable": true, + "readOnly": true + }, + "ogcGeometryType": { + "$ref": "#/components/schemas/NetTopologySuite.Geometries.OgcGeometryType" + }, + "precisionModel": { + "$ref": "#/components/schemas/NetTopologySuite.Geometries.PrecisionModel" + }, + "coordinate": { + "$ref": "#/components/schemas/NetTopologySuite.Geometries.Coordinate" + }, + "coordinates": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NetTopologySuite.Geometries.Coordinate" + }, + "nullable": true, + "readOnly": true + }, + "numPoints": { + "type": "integer", + "format": "int32", + "readOnly": true + }, + "numGeometries": { + "type": "integer", + "format": "int32", + "readOnly": true + }, + "isSimple": { + "type": "boolean", + "readOnly": true + }, + "isValid": { + "type": "boolean", + "readOnly": true + }, + "isEmpty": { + "type": "boolean", + "readOnly": true + }, + "area": { + "type": "number", + "format": "double", + "readOnly": true + }, + "length": { + "type": "number", + "format": "double", + "readOnly": true + }, + "centroid": { + "$ref": "#/components/schemas/NetTopologySuite.Geometries.Point" + }, + "interiorPoint": { + "$ref": "#/components/schemas/NetTopologySuite.Geometries.Point" + }, + "pointOnSurface": { + "$ref": "#/components/schemas/NetTopologySuite.Geometries.Point" + }, + "dimension": { + "$ref": "#/components/schemas/NetTopologySuite.Geometries.Dimension" + }, + "boundary": { + "$ref": "#/components/schemas/NetTopologySuite.Geometries.Geometry" + }, + "boundaryDimension": { + "$ref": "#/components/schemas/NetTopologySuite.Geometries.Dimension" + }, + "envelope": { + "$ref": "#/components/schemas/NetTopologySuite.Geometries.Geometry" + }, + "envelopeInternal": { + "$ref": "#/components/schemas/NetTopologySuite.Geometries.Envelope" + }, + "isRectangle": { + "type": "boolean", + "readOnly": true + } + }, + "additionalProperties": false + }, + "NetTopologySuite.Geometries.GeometryFactory": { + "type": "object", + "properties": { + "precisionModel": { + "$ref": "#/components/schemas/NetTopologySuite.Geometries.PrecisionModel" + }, + "coordinateSequenceFactory": { + "$ref": "#/components/schemas/NetTopologySuite.Geometries.CoordinateSequenceFactory" + }, + "srid": { + "type": "integer", + "format": "int32", + "readOnly": true + }, + "geometryServices": { + "$ref": "#/components/schemas/NetTopologySuite.NtsGeometryServices" + } + }, + "additionalProperties": false + }, + "NetTopologySuite.Geometries.GeometryOverlay": { + "type": "object", + "additionalProperties": false + }, + "NetTopologySuite.Geometries.LineString": { + "type": "object", + "properties": { + "factory": { + "$ref": "#/components/schemas/NetTopologySuite.Geometries.GeometryFactory" + }, + "userData": { + "nullable": true + }, + "srid": { + "type": "integer", + "format": "int32" + }, + "precisionModel": { + "$ref": "#/components/schemas/NetTopologySuite.Geometries.PrecisionModel" + }, + "numGeometries": { + "type": "integer", + "format": "int32", + "readOnly": true + }, + "isSimple": { + "type": "boolean", + "readOnly": true + }, + "isValid": { + "type": "boolean", + "readOnly": true + }, + "area": { + "type": "number", + "format": "double", + "readOnly": true + }, + "centroid": { + "$ref": "#/components/schemas/NetTopologySuite.Geometries.Point" + }, + "interiorPoint": { + "$ref": "#/components/schemas/NetTopologySuite.Geometries.Point" + }, + "pointOnSurface": { + "$ref": "#/components/schemas/NetTopologySuite.Geometries.Point" + }, + "envelope": { + "$ref": "#/components/schemas/NetTopologySuite.Geometries.Geometry" + }, + "envelopeInternal": { + "$ref": "#/components/schemas/NetTopologySuite.Geometries.Envelope" + }, + "isRectangle": { + "type": "boolean", + "readOnly": true + }, + "coordinates": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NetTopologySuite.Geometries.Coordinate" + }, + "nullable": true, + "readOnly": true + }, + "coordinateSequence": { + "$ref": "#/components/schemas/NetTopologySuite.Geometries.CoordinateSequence" + }, + "coordinate": { + "$ref": "#/components/schemas/NetTopologySuite.Geometries.Coordinate" + }, + "dimension": { + "$ref": "#/components/schemas/NetTopologySuite.Geometries.Dimension" + }, + "boundaryDimension": { + "$ref": "#/components/schemas/NetTopologySuite.Geometries.Dimension" + }, + "isEmpty": { + "type": "boolean", + "readOnly": true + }, + "numPoints": { + "type": "integer", + "format": "int32", + "readOnly": true + }, + "startPoint": { + "$ref": "#/components/schemas/NetTopologySuite.Geometries.Point" + }, + "endPoint": { + "$ref": "#/components/schemas/NetTopologySuite.Geometries.Point" + }, + "isClosed": { + "type": "boolean", + "readOnly": true + }, + "isRing": { + "type": "boolean", + "readOnly": true + }, + "geometryType": { + "type": "string", + "nullable": true, + "readOnly": true + }, + "ogcGeometryType": { + "$ref": "#/components/schemas/NetTopologySuite.Geometries.OgcGeometryType" + }, + "length": { + "type": "number", + "format": "double", + "readOnly": true + }, + "boundary": { + "$ref": "#/components/schemas/NetTopologySuite.Geometries.Geometry" + }, + "count": { + "type": "integer", + "format": "int32", + "readOnly": true + } + }, + "additionalProperties": false + }, + "NetTopologySuite.Geometries.LinearRing": { + "type": "object", + "properties": { + "factory": { + "$ref": "#/components/schemas/NetTopologySuite.Geometries.GeometryFactory" + }, + "userData": { + "nullable": true + }, + "srid": { + "type": "integer", + "format": "int32" + }, + "precisionModel": { + "$ref": "#/components/schemas/NetTopologySuite.Geometries.PrecisionModel" + }, + "numGeometries": { + "type": "integer", + "format": "int32", + "readOnly": true + }, + "isSimple": { + "type": "boolean", + "readOnly": true + }, + "isValid": { + "type": "boolean", + "readOnly": true + }, + "area": { + "type": "number", + "format": "double", + "readOnly": true + }, + "centroid": { + "$ref": "#/components/schemas/NetTopologySuite.Geometries.Point" + }, + "interiorPoint": { + "$ref": "#/components/schemas/NetTopologySuite.Geometries.Point" + }, + "pointOnSurface": { + "$ref": "#/components/schemas/NetTopologySuite.Geometries.Point" + }, + "envelope": { + "$ref": "#/components/schemas/NetTopologySuite.Geometries.Geometry" + }, + "envelopeInternal": { + "$ref": "#/components/schemas/NetTopologySuite.Geometries.Envelope" + }, + "isRectangle": { + "type": "boolean", + "readOnly": true + }, + "coordinates": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NetTopologySuite.Geometries.Coordinate" + }, + "nullable": true, + "readOnly": true + }, + "coordinateSequence": { + "$ref": "#/components/schemas/NetTopologySuite.Geometries.CoordinateSequence" + }, + "coordinate": { + "$ref": "#/components/schemas/NetTopologySuite.Geometries.Coordinate" + }, + "dimension": { + "$ref": "#/components/schemas/NetTopologySuite.Geometries.Dimension" + }, + "isEmpty": { + "type": "boolean", + "readOnly": true + }, + "numPoints": { + "type": "integer", + "format": "int32", + "readOnly": true + }, + "startPoint": { + "$ref": "#/components/schemas/NetTopologySuite.Geometries.Point" + }, + "endPoint": { + "$ref": "#/components/schemas/NetTopologySuite.Geometries.Point" + }, + "isRing": { + "type": "boolean", + "readOnly": true + }, + "ogcGeometryType": { + "$ref": "#/components/schemas/NetTopologySuite.Geometries.OgcGeometryType" + }, + "length": { + "type": "number", + "format": "double", + "readOnly": true + }, + "boundary": { + "$ref": "#/components/schemas/NetTopologySuite.Geometries.Geometry" + }, + "count": { + "type": "integer", + "format": "int32", + "readOnly": true + }, + "boundaryDimension": { + "$ref": "#/components/schemas/NetTopologySuite.Geometries.Dimension" + }, + "isClosed": { + "type": "boolean", + "readOnly": true + }, + "geometryType": { + "type": "string", + "nullable": true, + "readOnly": true + }, + "isCCW": { + "type": "boolean", + "readOnly": true + } + }, + "additionalProperties": false + }, + "NetTopologySuite.Geometries.OgcGeometryType": { + "enum": [ + "Point", + "LineString", + "Polygon", + "MultiPoint", + "MultiLineString", + "MultiPolygon", + "GeometryCollection", + "CircularString", + "CompoundCurve", + "CurvePolygon", + "MultiCurve", + "MultiSurface", + "Curve", + "Surface", + "PolyhedralSurface", + "TIN" + ], + "type": "integer", + "format": "int32" + }, + "NetTopologySuite.Geometries.Ordinates": { + "enum": [ + "None", + "X", + "Spatial1", + "Y", + "Spatial2", + "XY", + "Z", + "Spatial3", + "XYZ", + "Spatial4", + "Spatial5", + "Spatial6", + "Spatial7", + "Spatial8", + "Spatial9", + "Spatial10", + "Spatial11", + "Spatial12", + "Spatial13", + "Spatial14", + "Spatial15", + "Spatial16", + "AllSpatialOrdinates", + "M", + "Measure1", + "XYM", + "XYZM", + "Measure2", + "Measure3", + "Measure4", + "Measure5", + "Measure6", + "Measure7", + "Measure8", + "Measure9", + "Measure10", + "Measure11", + "Measure12", + "Measure13", + "Measure14", + "Measure15", + "Measure16", + "AllMeasureOrdinates", + "AllOrdinates" + ], + "type": "integer", + "format": "int32" + }, + "NetTopologySuite.Geometries.Point": { + "type": "object", + "properties": { + "factory": { + "$ref": "#/components/schemas/NetTopologySuite.Geometries.GeometryFactory" + }, + "userData": { + "nullable": true + }, + "srid": { + "type": "integer", + "format": "int32" + }, + "precisionModel": { + "$ref": "#/components/schemas/NetTopologySuite.Geometries.PrecisionModel" + }, + "numGeometries": { + "type": "integer", + "format": "int32", + "readOnly": true + }, + "isSimple": { + "type": "boolean", + "readOnly": true + }, + "isValid": { + "type": "boolean", + "readOnly": true + }, + "area": { + "type": "number", + "format": "double", + "readOnly": true + }, + "length": { + "type": "number", + "format": "double", + "readOnly": true + }, + "centroid": { + "$ref": "#/components/schemas/NetTopologySuite.Geometries.Point" + }, + "interiorPoint": { + "$ref": "#/components/schemas/NetTopologySuite.Geometries.Point" + }, + "pointOnSurface": { + "$ref": "#/components/schemas/NetTopologySuite.Geometries.Point" + }, + "envelope": { + "$ref": "#/components/schemas/NetTopologySuite.Geometries.Geometry" + }, + "envelopeInternal": { + "$ref": "#/components/schemas/NetTopologySuite.Geometries.Envelope" + }, + "isRectangle": { + "type": "boolean", + "readOnly": true + }, + "coordinateSequence": { + "$ref": "#/components/schemas/NetTopologySuite.Geometries.CoordinateSequence" + }, + "coordinates": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NetTopologySuite.Geometries.Coordinate" + }, + "nullable": true, + "readOnly": true + }, + "numPoints": { + "type": "integer", + "format": "int32", + "readOnly": true + }, + "isEmpty": { + "type": "boolean", + "readOnly": true + }, + "dimension": { + "$ref": "#/components/schemas/NetTopologySuite.Geometries.Dimension" + }, + "boundaryDimension": { + "$ref": "#/components/schemas/NetTopologySuite.Geometries.Dimension" + }, + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "coordinate": { + "$ref": "#/components/schemas/NetTopologySuite.Geometries.Coordinate" + }, + "geometryType": { + "type": "string", + "nullable": true, + "readOnly": true + }, + "ogcGeometryType": { + "$ref": "#/components/schemas/NetTopologySuite.Geometries.OgcGeometryType" + }, + "boundary": { + "$ref": "#/components/schemas/NetTopologySuite.Geometries.Geometry" + }, + "z": { + "type": "number", + "format": "double" + }, + "m": { + "type": "number", + "format": "double" + } + }, + "additionalProperties": false + }, + "NetTopologySuite.Geometries.Polygon": { + "type": "object", + "properties": { + "factory": { + "$ref": "#/components/schemas/NetTopologySuite.Geometries.GeometryFactory" + }, + "userData": { + "nullable": true + }, + "srid": { + "type": "integer", + "format": "int32" + }, + "precisionModel": { + "$ref": "#/components/schemas/NetTopologySuite.Geometries.PrecisionModel" + }, + "numGeometries": { + "type": "integer", + "format": "int32", + "readOnly": true + }, + "isSimple": { + "type": "boolean", + "readOnly": true + }, + "isValid": { + "type": "boolean", + "readOnly": true + }, + "centroid": { + "$ref": "#/components/schemas/NetTopologySuite.Geometries.Point" + }, + "interiorPoint": { + "$ref": "#/components/schemas/NetTopologySuite.Geometries.Point" + }, + "pointOnSurface": { + "$ref": "#/components/schemas/NetTopologySuite.Geometries.Point" + }, + "envelope": { + "$ref": "#/components/schemas/NetTopologySuite.Geometries.Geometry" + }, + "envelopeInternal": { + "$ref": "#/components/schemas/NetTopologySuite.Geometries.Envelope" + }, + "coordinate": { + "$ref": "#/components/schemas/NetTopologySuite.Geometries.Coordinate" + }, + "coordinates": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NetTopologySuite.Geometries.Coordinate" + }, + "nullable": true, + "readOnly": true + }, + "numPoints": { + "type": "integer", + "format": "int32", + "readOnly": true + }, + "dimension": { + "$ref": "#/components/schemas/NetTopologySuite.Geometries.Dimension" + }, + "boundaryDimension": { + "$ref": "#/components/schemas/NetTopologySuite.Geometries.Dimension" + }, + "isEmpty": { + "type": "boolean", + "readOnly": true + }, + "exteriorRing": { + "$ref": "#/components/schemas/NetTopologySuite.Geometries.LineString" + }, + "numInteriorRings": { + "type": "integer", + "format": "int32", + "readOnly": true + }, + "interiorRings": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NetTopologySuite.Geometries.LineString" + }, + "nullable": true, + "readOnly": true + }, + "geometryType": { + "type": "string", + "nullable": true, + "readOnly": true + }, + "ogcGeometryType": { + "$ref": "#/components/schemas/NetTopologySuite.Geometries.OgcGeometryType" + }, + "area": { + "type": "number", + "format": "double", + "readOnly": true + }, + "length": { + "type": "number", + "format": "double", + "readOnly": true + }, + "boundary": { + "$ref": "#/components/schemas/NetTopologySuite.Geometries.Geometry" + }, + "isRectangle": { + "type": "boolean", + "readOnly": true + }, + "shell": { + "$ref": "#/components/schemas/NetTopologySuite.Geometries.LinearRing" + }, + "holes": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NetTopologySuite.Geometries.LinearRing" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "NetTopologySuite.Geometries.PrecisionModel": { + "type": "object", + "properties": { + "isFloating": { + "type": "boolean", + "readOnly": true + }, + "maximumSignificantDigits": { + "type": "integer", + "format": "int32", + "readOnly": true + }, + "scale": { + "type": "number", + "format": "double" + }, + "gridSize": { + "type": "number", + "format": "double", + "readOnly": true + }, + "precisionModelType": { + "$ref": "#/components/schemas/NetTopologySuite.Geometries.PrecisionModels" + } + }, + "additionalProperties": false + }, + "NetTopologySuite.Geometries.PrecisionModels": { + "enum": [ + "Floating", + "FloatingSingle", + "Fixed" + ], + "type": "integer", + "format": "int32" + }, + "NetTopologySuite.NtsGeometryServices": { + "type": "object", + "properties": { + "geometryOverlay": { + "$ref": "#/components/schemas/NetTopologySuite.Geometries.GeometryOverlay" + }, + "coordinateEqualityComparer": { + "$ref": "#/components/schemas/NetTopologySuite.Geometries.CoordinateEqualityComparer" + }, + "defaultSRID": { + "type": "integer", + "format": "int32", + "readOnly": true + }, + "defaultCoordinateSequenceFactory": { + "$ref": "#/components/schemas/NetTopologySuite.Geometries.CoordinateSequenceFactory" + }, + "defaultPrecisionModel": { + "$ref": "#/components/schemas/NetTopologySuite.Geometries.PrecisionModel" + } + }, + "additionalProperties": false + }, + "System.DayOfWeek": { + "enum": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "type": "integer", + "format": "int32" + }, + "System.Security.Claims.Claim": { + "type": "object", + "properties": { + "issuer": { + "type": "string", + "nullable": true, + "readOnly": true + }, + "originalIssuer": { + "type": "string", + "nullable": true, + "readOnly": true + }, + "properties": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "nullable": true, + "readOnly": true + }, + "subject": { + "$ref": "#/components/schemas/System.Security.Claims.ClaimsIdentity" + }, + "type": { + "type": "string", + "nullable": true, + "readOnly": true + }, + "value": { + "type": "string", + "nullable": true, + "readOnly": true + }, + "valueType": { + "type": "string", + "nullable": true, + "readOnly": true + } + }, + "additionalProperties": false + }, + "System.Security.Claims.ClaimsIdentity": { + "type": "object", + "properties": { + "authenticationType": { + "type": "string", + "nullable": true, + "readOnly": true + }, + "isAuthenticated": { + "type": "boolean", + "readOnly": true + }, + "actor": { + "$ref": "#/components/schemas/System.Security.Claims.ClaimsIdentity" + }, + "bootstrapContext": { + "nullable": true + }, + "claims": { + "type": "array", + "items": { + "$ref": "#/components/schemas/System.Security.Claims.Claim" + }, + "nullable": true, + "readOnly": true + }, + "label": { + "type": "string", + "nullable": true + }, + "name": { + "type": "string", + "nullable": true, + "readOnly": true + }, + "nameClaimType": { + "type": "string", + "nullable": true, + "readOnly": true + }, + "roleClaimType": { + "type": "string", + "nullable": true, + "readOnly": true + } + }, + "additionalProperties": false + } + }, + "securitySchemes": { + "Bearer": { + "type": "http", + "description": "Please enter a valid token from the login endpoint", + "scheme": "Bearer", + "bearerFormat": "JWT" + } + } + }, + "security": [ + { + "Bearer": [ ] + } + ] +} \ No newline at end of file diff --git a/core/src/test/groovy/org/justserve/BoundaryPermissionSpec.groovy b/core/src/test/groovy/org/justserve/BoundaryPermissionSpec.groovy new file mode 100644 index 0000000..992bf23 --- /dev/null +++ b/core/src/test/groovy/org/justserve/BoundaryPermissionSpec.groovy @@ -0,0 +1,52 @@ +package org.justserve + +import io.micronaut.http.client.exceptions.HttpClientResponseException +import io.micronaut.test.extensions.spock.annotation.MicronautTest +import org.justserve.client.BoundaryPermissionClient +import spock.lang.Shared + +import static io.micronaut.http.HttpStatus.INTERNAL_SERVER_ERROR +import static io.micronaut.http.HttpStatus.UNAUTHORIZED + +@MicronautTest +class BoundaryPermissionSpec extends JustServeSpec { + + @Shared + BoundaryPermissionClient noAuthBoundaryPermissionClient, authBoundaryPermissionClient + + def setupSpec() { + noAuthBoundaryPermissionClient = noAuthCtx.getBean(BoundaryPermissionClient) + authBoundaryPermissionClient = ctx.getBean(BoundaryPermissionClient) + } + + def "successfully reassign organization admin"() { + given: + UUID userID = createUser().getId() + UUID orgID = createOrg() + + when: + authBoundaryPermissionClient.makeAdminForOrg(orgID, userID).block() + + then: + noExceptionThrown() + } + + def "fail to reassign organization admin #title"() { + given: + UUID userID = createUser().getId() + + when: + client.makeAdminForOrg(orgID, userID).block() + + then: + def exception = thrown(HttpClientResponseException) + exception.status == expectedError + + where: + client | expectedError | orgID | title + noAuthBoundaryPermissionClient | UNAUTHORIZED | createOrg() | "as an unauthorized user" + authBoundaryPermissionClient | INTERNAL_SERVER_ERROR | UUID.randomUUID() | "with a non-existent OrgID" + } + + +} diff --git a/core/src/test/groovy/org/justserve/DynamicRoutingClientSpec.groovy b/core/src/test/groovy/org/justserve/DynamicRoutingClientSpec.groovy new file mode 100644 index 0000000..3d5f492 --- /dev/null +++ b/core/src/test/groovy/org/justserve/DynamicRoutingClientSpec.groovy @@ -0,0 +1,46 @@ +package org.justserve + + +import io.micronaut.http.client.exceptions.HttpClientResponseException +import io.micronaut.test.extensions.spock.annotation.MicronautTest +import org.justserve.client.DynamicRoutingClient +import spock.lang.Shared + +@MicronautTest +class DynamicRoutingClientSpec extends JustServeSpec { + + @Shared + DynamicRoutingClient noAuthClient, authClient + + @Shared + String realOrgSlug + + + def setupSpec() { + noAuthClient = noAuthCtx.getBean(DynamicRoutingClient) + authClient = ctx.getBean(DynamicRoutingClient) + realOrgSlug = authOrgClient.searchByLocation(createSearchRequestForElkGrove()).block().getOrganizations().first().getUrl() + } + + def "can query orgId for #url"(DynamicRoutingClient client, String url) { + when: + client.getOrgIdFromSlug(url).block() + + then: + noExceptionThrown() + + where: + [url, client] << [[realOrgSlug], [authClient, noAuthClient]].combinations() + } + + def "attempting to query the orgId for #url fails as expected"(DynamicRoutingClient client, String url) { + when: + client.getOrgIdFromSlug(url).block() + + then: + thrown(HttpClientResponseException) + + where: + [url, client] << [["thisisafakeurl"], [authClient, noAuthClient]].combinations() + } +} diff --git a/core/src/test/groovy/org/justserve/GraphQLClientSpec.groovy b/core/src/test/groovy/org/justserve/GraphQLClientSpec.groovy new file mode 100644 index 0000000..e041961 --- /dev/null +++ b/core/src/test/groovy/org/justserve/GraphQLClientSpec.groovy @@ -0,0 +1,381 @@ +package org.justserve + +import io.micronaut.http.client.exceptions.HttpClientResponseException +import io.micronaut.test.extensions.spock.annotation.MicronautTest +import jakarta.inject.Inject +import net.datafaker.Faker +import org.justserve.client.GraphQLClient +import org.justserve.model.* +import org.justserve.model.graph.* +import spock.lang.Shared +import spock.lang.Specification +import spock.lang.Unroll + +import java.util.concurrent.TimeUnit + +@MicronautTest +class GraphQLClientSpec extends Specification { + + @Shared + @Inject + GraphQLClient client + + @Shared + Faker faker = new Faker() + + Map projectIds = [:] + + + def setup() { + EventType.values().each { type -> + def project = client.createProject(new GraphQLCreateProjectVariables() + .setTitle("Test Project - ${type.name()}") + .setEventType(type) + .setLocationType(ProjectLocationType.SINGLE_LOCATION) + ).block() + projectIds[type] = project.getData().getCreateProject().getId() + } + } + + @SuppressWarnings("GroovyAssignabilityCheck") + void "can create Project with EventType: #eventType, LocationType: #locationType, and Redirect: #redirect"(EventType eventType, ProjectLocationType locationType, String redirect) { + given: + GraphQLCreateProjectVariables args = new GraphQLCreateProjectVariables() + .setEventType(eventType) + .setLocationType(locationType) + .setTitle("this is my title") + .setRedirect(redirect) + + when: + client.createProject(args).block() + + then: + noExceptionThrown() + + where: + [eventType, locationType, redirect] << [EventType.values(), ProjectLocationType.values(), ["", null, "https://google.com"]].combinations() + } + + private ProjectEvent.ProjectEventBuilder baseEventBuilder() { + return ProjectEvent.builder() + .start(Date.from(faker.timeAndDate().future(180, TimeUnit.DAYS))) + .end(Date.from(faker.timeAndDate().future(365, TimeUnit.DAYS))) + } + + @Unroll("can set contact info for #eventType.name() event") + def "can set contact info for #eventType event"() { + given: + def event = baseEventBuilder() + .contactEmail(faker.internet().emailAddress()) + .contactName(faker.name().fullName()) + .contactPhone(faker.phoneNumber().phoneNumber()) + .build() + def vars = new CreateEventVariables().setProjectId(projectIds[eventType]).setProjectEvent(event) + + when: + client.createEvent(new CreateEventMutation(vars)).block() + + then: + noExceptionThrown() + + where: + eventType << [EventType.DTL, EventType.Ongoing, EventType.MultipleDTL] + } + + @Unroll("can set dates for #eventType.name() event") + def "can set dates for #eventType event"() { + given: + def event = baseEventBuilder() + .renewDate(Date.from(faker.timeAndDate().future(730, TimeUnit.DAYS))) + .build() + def vars = new CreateEventVariables().setProjectId(projectIds[eventType]).setProjectEvent(event) + + when: + client.createEvent(new CreateEventMutation(vars)).block() + + then: + noExceptionThrown() + + where: + eventType << [EventType.MultipleDTL] + } + + @Unroll("can set group info for #eventType.name() event") + def "can set group info for #eventType event"() { + given: + def event = baseEventBuilder() + .groupCap(true) + .groupLimit(10) + .build() + def vars = new CreateEventVariables().setProjectId(projectIds[eventType]).setProjectEvent(event) + + when: + client.createEvent(new CreateEventMutation(vars)).block() + + then: + noExceptionThrown() + + where: + eventType << [EventType.Ongoing, EventType.MultipleDTL] + } + + @Unroll("can set location info for #eventType.name() event") + def "can set location info for #eventType event"() { + given: + def event = baseEventBuilder() + .locationLink(faker.internet().url()) + .locationName(faker.address().streetAddress()) + .build() + def vars = new CreateEventVariables().setProjectId(projectIds[eventType]).setProjectEvent(event) + + when: + client.createEvent(new CreateEventMutation(vars)).block() + + then: + noExceptionThrown() + + where: + eventType << [EventType.DTL, EventType.MultipleDTL] + } + + @Unroll("can set schedule info for #eventType.name() event") + def "can set schedule info for #eventType event"() { + given: + def schedule = faker.lorem().sentence() + def event = baseEventBuilder() + .schedule(schedule) + .shiftTitle(schedule) + .build() + def vars = new CreateEventVariables().setProjectId(projectIds[eventType]).setProjectEvent(event) + + when: + client.createEvent(new CreateEventMutation(vars)).block() + + then: + noExceptionThrown() + + where: + eventType << [EventType.DTL, EventType.Ongoing, EventType.MultipleDTL] + } + + @Unroll("can set volunteer info for #eventType.name() event") + def "can set volunteer info for #eventType event"() { + given: + def event = baseEventBuilder() + .volunteerCap(true) + .totalVolunteersNeeded(20) + .build() + def vars = new CreateEventVariables().setProjectId(projectIds[eventType]).setProjectEvent(event) + + when: + client.createEvent(new CreateEventMutation(vars)).block() + + then: + noExceptionThrown() + + where: + eventType << [EventType.DTL, EventType.Ongoing, EventType.MultipleDTL] + } + + @Unroll("can set miscellaneous info for #eventType.name() event") + def "can set miscellaneous info for #eventType event"() { + given: + def event = baseEventBuilder() + .qrCodeImageLocation(faker.internet().url()) + .specialDirections(faker.lorem().paragraph()) + .status(ProjectEventStatus.ACTIVE) + .timezone(TimeZone.ARIZONA) + .build() + def vars = new CreateEventVariables().setProjectId(projectIds[eventType]).setProjectEvent(event) + + when: + client.createEvent(new CreateEventMutation(vars)).block() + + then: + noExceptionThrown() + + where: + eventType << [EventType.DTL, EventType.Ongoing, EventType.MultipleDTL] + } + + @Unroll("cannot manually create event for #eventType.name() project") + def "cannot manually create event for invalid project types"() { + given: + def event = baseEventBuilder().build() + def vars = new CreateEventVariables().setProjectId(projectIds[eventType]).setProjectEvent(event) + + when: + client.createEvent(new CreateEventMutation(vars)).block() + + then: + thrown(HttpClientResponseException) + + where: + eventType << [EventType.Recurring] + } + + @Unroll("can NOT add multiple events only for #eventType.name() projects") + def "can add multiple events only for Multi-DTL projects"() { + given: + def firstEvent = baseEventBuilder().build() + def secondEvent = baseEventBuilder().build() + def firstVars = new CreateEventVariables().setProjectId(projectIds[eventType]).setProjectEvent(firstEvent) + def secondVars = new CreateEventVariables().setProjectId(projectIds[eventType]).setProjectEvent(secondEvent) + + when: + client.createEvent(new CreateEventMutation(firstVars)).block() + client.createEvent(new CreateEventMutation(secondVars)).block() + + then: + thrown(HttpClientResponseException) + + where: + eventType << [EventType.DTL, EventType.Ongoing, EventType.Recurring] + } + + @Unroll("can add multiple events only for #eventType.name() project") + def "can add multiple events only for Multi-DTL projects"() { + given: + def firstEvent = baseEventBuilder().build() + def secondEvent = baseEventBuilder().build() + def firstVars = new CreateEventVariables().setProjectId(projectIds[eventType]).setProjectEvent(firstEvent) + def secondVars = new CreateEventVariables().setProjectId(projectIds[eventType]).setProjectEvent(secondEvent) + + when: + client.createEvent(new CreateEventMutation(firstVars)).block() + client.createEvent(new CreateEventMutation(secondVars)).block() + + then: + noExceptionThrown() + + where: + eventType << [EventType.MultipleDTL] + } + + def "can create multiple events at once for Multi-DTL projects using createEvents mutation"() { + given: + def thisEvent = baseEventBuilder().shiftTitle("Morning Shift").build() + def thatEvent = baseEventBuilder().shiftTitle("Afternoon Shift").build() + def event3 = baseEventBuilder().shiftTitle("Evening Shift").build() + def vars = new CreateEventsVariables(projectIds[EventType.MultipleDTL], thisEvent, thatEvent, event3) + def mutation = new CreateEventsMutation(vars) + + when: + def response = client.createEvents(mutation).block() + + then: + noExceptionThrown() + + and: "the response data should contain the newly created events" + null != response.getData() + } + + def "can create multiple recurring events at once for Recurring projects using createRecurringEvents mutation"() { + given: + def time1 = new ProjectRecurringTime().setStartTime("10:00").setEndTime("12:00").setRecurringType(RecurringType.WEEKLY).setMonday(true) + def time2 = new ProjectRecurringTime().setStartTime("14:00").setEndTime("16:00").setRecurringType(RecurringType.MONTHLY).setThirdWeek(true) + def vars = new CreateRecurringEventsVariables(projectIds[EventType.Recurring], time1, time2) + def mutation = new CreateRecurringEventsMutation(vars) + + when: + def response = client.createRecurringEvents(mutation).block() + + then: + noExceptionThrown() + + and: "the response data should contain the newly created recurring events" + null != response.getData() + } + + def "cannot create event without start and end dates"() { + when: + ProjectEvent.builder().build() + + then: + thrown(IllegalStateException) + } + + def "cannot set groupCap without groupLimit"() { + when: + baseEventBuilder().groupCap(true).build() + + then: + thrown(IllegalStateException) + } + + def "cannot set volunteerCap without totalVolunteersNeeded"() { + when: + baseEventBuilder().volunteerCap(true).build() + + then: + thrown(IllegalStateException) + } + + def "cannot set volunteersCapped without volunteersNeeded on ProjectRecurringTime"() { + when: + ProjectRecurringTime.builder().volunteersCapped(true).build() + + then: + thrown(IllegalStateException) + } + + def "can set all info for ProjectRecurringTime"() { + given: + def time1 = ProjectRecurringTime.builder() + .contactEmail(faker.internet().emailAddress()) + .contactName(faker.name().fullName()) + .contactPhone(faker.phoneNumber().phoneNumber()) + .startTime("10:00") + .endTime("12:00") + .firstWeek(true) + .secondWeek(true) + .thirdWeek(true) + .fourthWeek(true) + .fifthWeek(true) + .lastWeek(true) + .groupLimit(10) + .recurringType(RecurringType.WEEKLY) + .recurringDaysOfMonths([1, 15, 28]) + .specialDirections(faker.lorem().paragraph()) + .volunteersCapped(true) + .volunteersNeeded(5) + .monday(true) + .tuesday(true) + .wednesday(true) + .thursday(true) + .friday(true) + .saturday(true) + .sunday(true) + .build() + + def vars = new CreateRecurringEventsVariables(projectIds[EventType.Recurring], time1) + def mutation = new CreateRecurringEventsMutation(vars) + + when: + def response = client.createRecurringEvents(mutation).block() + + then: + noExceptionThrown() + !response.hasErrors() + } + + @SuppressWarnings("GroovyAssignabilityCheck") + def "test searchOrganization parses the input correctly"(String searchTerm, Boolean includesAll) { + given: + + GraphQLSearchOrganizationVariables inputData = new GraphQLSearchOrganizationVariables() + .setSearchTerm(searchTerm) + .setIncludeAll(includesAll) + + when: + GraphQLResponse response = client.searchOrganization(inputData).block() + + then: + noExceptionThrown() + !response.hasErrors() + + where: + [includesAll, searchTerm] << [[true, false], ["the"]].combinations() + + } +} diff --git a/core/src/test/groovy/org/justserve/GraphQLErrorClientFilterSpec.groovy b/core/src/test/groovy/org/justserve/GraphQLErrorClientFilterSpec.groovy new file mode 100644 index 0000000..b68fe72 --- /dev/null +++ b/core/src/test/groovy/org/justserve/GraphQLErrorClientFilterSpec.groovy @@ -0,0 +1,61 @@ +package org.justserve + +import io.micronaut.http.client.exceptions.HttpClientResponseException +import io.micronaut.test.extensions.spock.annotation.MicronautTest +import jakarta.inject.Inject +import net.datafaker.Faker +import org.justserve.client.GraphQLClient +import org.justserve.model.EventType +import org.justserve.model.GraphQLCreateProjectVariables +import org.justserve.model.ProjectLocationType +import org.justserve.model.ProjectRecurringTime +import org.justserve.model.graph.CreateRecurringEventsMutation +import org.justserve.model.graph.CreateRecurringEventsVariables +import spock.lang.Shared +import spock.lang.Specification + +@MicronautTest +class GraphQLErrorClientFilterSpec extends Specification { + + @Shared + @Inject + GraphQLClient client + + @SuppressWarnings("GroovyAssignabilityCheck") + void "can create Project with EventType: #eventType, LocationType: #locationType, and Redirect: #redirect"(EventType eventType, ProjectLocationType locationType, String redirect) { + given: + GraphQLCreateProjectVariables args = new GraphQLCreateProjectVariables() + .setEventType(eventType) + .setLocationType(locationType) + .setTitle("this is my title") + .setRedirect(redirect) + + when: + def response = client.createProject(args).block() + + then: + noExceptionThrown() + + when: "create an incompatible event" + response.getData().getCreateProject() + client.createRecurringEvents( + new CreateRecurringEventsMutation( + new CreateRecurringEventsVariables( + response.getData().getCreateProject().getId(), + new ProjectRecurringTime().setEndTime("whenever")))) + .block() + + then: + HttpClientResponseException error = thrown(HttpClientResponseException) + + and: + verifyAll { + error.getMessage().length() > 0 + error.getClass() == HttpClientResponseException.class + } + + + where: + [eventType, locationType, redirect] << [EventType.DTL, ProjectLocationType.values(), ["", null, "https://google.com"]].combinations() + } +} \ No newline at end of file diff --git a/src/test/groovy/org/justserve/client/ImageClientSpec.groovy b/core/src/test/groovy/org/justserve/ImageClientSpec.groovy similarity index 84% rename from src/test/groovy/org/justserve/client/ImageClientSpec.groovy rename to core/src/test/groovy/org/justserve/ImageClientSpec.groovy index 8749aed..5ce8177 100644 --- a/src/test/groovy/org/justserve/client/ImageClientSpec.groovy +++ b/core/src/test/groovy/org/justserve/ImageClientSpec.groovy @@ -1,11 +1,13 @@ -package org.justserve.client +package org.justserve import io.micronaut.http.HttpStatus import io.micronaut.http.client.exceptions.HttpClientResponseException -import org.justserve.JustServeSpec +import io.micronaut.test.extensions.spock.annotation.MicronautTest +import org.justserve.client.ImageClient import org.justserve.model.ImageUploadRequest import spock.lang.Shared +@MicronautTest class ImageClientSpec extends JustServeSpec { @Shared @@ -22,7 +24,7 @@ class ImageClientSpec extends JustServeSpec { def imageUpload = new ImageUploadRequest(faker.image().base64JPG().split(",")[1], 256, 256, false, 0, 0) when: - client.uploadImage(imageUpload) + client.uploadImage(imageUpload).block() then: noExceptionThrown() @@ -38,12 +40,11 @@ class ImageClientSpec extends JustServeSpec { def imageUpload = new ImageUploadRequest(faker.image().base64JPG().split(",")[1], 256, 256, false, 0, 0) when: - def response = client.uploadImage(imageUpload) + def response = client.uploadImage(imageUpload).block() then: if (!expectedStatus) { - response.status() == HttpStatus.CREATED - response.body() != null + response != null return } def exception = thrown(HttpClientResponseException) diff --git a/src/test/groovy/org/justserve/JustServeSpec.groovy b/core/src/test/groovy/org/justserve/JustServeSpec.groovy similarity index 62% rename from src/test/groovy/org/justserve/JustServeSpec.groovy rename to core/src/test/groovy/org/justserve/JustServeSpec.groovy index 277ddad..cc98c30 100644 --- a/src/test/groovy/org/justserve/JustServeSpec.groovy +++ b/core/src/test/groovy/org/justserve/JustServeSpec.groovy @@ -2,16 +2,20 @@ package org.justserve import io.micronaut.context.ApplicationContext import io.micronaut.context.env.Environment -import io.micronaut.http.HttpResponse import io.micronaut.http.HttpStatus import io.micronaut.http.client.exceptions.HttpClientResponseException +import io.micronaut.http.client.multipart.MultipartBody +import io.micronaut.retry.annotation.Retryable import io.micronaut.test.extensions.spock.annotation.MicronautTest import net.datafaker.Faker +import org.apache.commons.lang3.RandomStringUtils import org.justserve.client.* import org.justserve.model.* import spock.lang.Shared import spock.lang.Specification +import java.util.stream.Collectors + import static org.justserve.model.DistanceType.MILES @MicronautTest() @@ -51,7 +55,7 @@ class JustServeSpec extends Specification { OrganizationClient authOrgClient @Shared - UserClient userClient + UserClient adminUserClient @Shared TestUser readOnlyUser @@ -62,20 +66,16 @@ class JustServeSpec extends Specification { def setupSpec() { faker = new Faker() - if (null != System.getenv("JUSTSERVE_TOKEN")) { - throw new IllegalStateException("JUSTSERVE_TOKEN is set. Do not define this variable in testing.") - } ctx = ApplicationContext.builder() .environments(Environment.CLI, Environment.TEST) - .properties([ - "justserve.token": System.getenv("TEST_TOKEN") - ]) + .properties(["justserve.token": System.getProperty("justserve.token") ?: System.getenv("JUSTSERVE_TOKEN")]) .build() .start() noAuthCtx = ApplicationContext .builder() .environments(Environment.CLI, Environment.TEST) .environmentVariableExcludes("JUSTSERVE_TOKEN") + .properties(["justserve.token": ""]) .build() .start() noAuthUserClient = noAuthCtx.getBean(UserClient) @@ -84,41 +84,56 @@ class JustServeSpec extends Specification { authOrgClient = ctx.getBean(OrganizationClient) authBoundaryPermissionClient = ctx.getBean(BoundaryPermissionClient) authDynamicRoutingClient = ctx.getBean(DynamicRoutingClient) - userClient = ctx.getBean(UserClient) + adminUserClient = ctx.getBean(UserClient) readOnlyUser = new TestUser(new Faker(Locale.of("en-us"))) projectClient = ctx.getBean(ProjectClient) - readOnlyUser.uuid = createUser(noAuthUserClient, readOnlyUser).body().getId() + String customRandomEmail = RandomStringUtils.insecure().nextAlphanumeric(20) + "@fake.com" + readOnlyUser.uuid = createUserFromFaker(noAuthUserClient, readOnlyUser, customRandomEmail).getId() + readOnlyUser.email = customRandomEmail searchResults = getProjectsByLocation(faker.location().toString()) } void cleanupSpec() { - noAuthCtx.stop() - ctx.stop() + [noAuthCtx, ctx].each { context -> + try { + context?.stop() + } catch (Exception ignored) { + } + } } - def createUser() { - def response - while (null == response) { + CreateUser200Response createUser(UserClient client = noAuthUserClient) { + CreateUser200Response response = null + def tries = 0 + while (null == response && tries < 5) { try { // A new user is generated on each loop iteration to avoid collisions - response = createUser(noAuthUserClient, new TestUser(new Faker(Locale.of("en-us")))) + response = createUserFromFaker(client, new TestUser(new Faker(Locale.of("en-us")))) } catch (HttpClientResponseException ignored) { - // This user likely already exists, so we'll loop and try a new one. } + tries++ + } + if (null == response) { + throw new IllegalStateException("failed to create a test user after five attempts") } return response } - def createUser(UserClient client = noAuthUserClient, TestUser user) { - return client.createUser( - user.firstName, - user.lastName, - user.email, - user.password, - user.zipcode, - user.locale, - user.country, - user.countryCode) + @Retryable + private static CreateUser200Response createUserFromFaker(UserClient client, TestUser user, String uniqueEmailInput = null) { + String email = uniqueEmailInput ?: RandomStringUtils.insecure().nextAlphanumeric(20) + "@fake.com" + MultipartBody requestBody = MultipartBody.builder() + .addPart("firstName", user.firstName) + .addPart("lastName", user.lastName) + .addPart("email", email) + .addPart("password", "JustServe2026") + .addPart("postal", user.zipcode) + .addPart("language", user.locale) + .addPart("countryCode", user.countryCode) + .addPart("country", user.country) + .addPart("termsChecked", "true") + .build() + client.createUser(requestBody).block() } List getProjectsByLocation(String location) { @@ -129,7 +144,7 @@ class JustServeSpec extends Specification { return projectClient.searchProjects(new ProjectSearchRequest().setPage(Integer.valueOf(page)) .setSize(size).setKeywords(keyword).setLocation(location).setRadiusType(MILES).setVolunteerFromAnywhere(false) .setIncludeOrgInfo(true).setLanguage(locale).setBrowserLocale(locale).setPublishedOnly(false) - .setIncludeFilledProjects(true).setDisasterRecoveryProjectsOnly(false).setTimesOfDay(null)).body().getItems() + .setIncludeFilledProjects(true).setDisasterRecoveryProjectsOnly(false).setTimesOfDay(null)).block().getItems() } @@ -144,14 +159,14 @@ class JustServeSpec extends Specification { .setContactPhone(faker.phoneNumber().phoneNumber()) .setDescription(faker.zelda().game()) .setLocationString(knownWorkingLocation) - .setLogo(getUploadedImageFileName()) + .setLogo(null) .setName(faker.zelda().character()) .set_public(null) .setUrl(getUniqueSlug()) .setVolunteerCenterInfo(null) .setWebsite(faker.internet().url()) - authOrgClient.createOrganization(orgRequest) - return authDynamicRoutingClient.getOrgIdFromSlug(orgRequest.url).body().id + authOrgClient.createOrganization(orgRequest).block() + return authDynamicRoutingClient.getOrgIdFromSlug(orgRequest.url).block().id } /** @@ -159,10 +174,8 @@ class JustServeSpec extends Specification { * @param count The number of organizations to create. * @return A list of UUIDs for the created organizations. */ - List createOrgs(int count) { - return (1..count).collect { - createOrg() - } + List createTestOrgs(int count) { + return (1..count).toList().parallelStream().map({ _ -> createOrg() }).collect(Collectors.toList()) } @@ -181,10 +194,8 @@ class JustServeSpec extends Specification { * @return The file name of the uploaded image. */ String getUploadedImageFileName() { - HttpResponse profileImage = authImageClient.uploadImage( - new ImageUploadRequest(faker.image().base64JPG().split(",")[1], 256, 256, false, 0, 0) - ) - return profileImage.body().displayFileName + ImageUploadResponse profileImage = authImageClient.uploadImage(new ImageUploadRequest(faker.image().base64JPG().split(",")[1], 256, 256, false, 0, 0)).block() + return profileImage.displayFileName } /** @@ -194,10 +205,15 @@ class JustServeSpec extends Specification { String getUniqueSlug() { String urlSlug = null while (null == urlSlug) { - def potentialSlug = faker.word().noun() - def response = authDynamicRoutingClient.getOrgIdFromSlug(potentialSlug) - if (response.status() == HttpStatus.NOT_FOUND) { - urlSlug = potentialSlug + def potentialSlug = faker.word().noun() + System.currentTimeMillis() + try { + authDynamicRoutingClient.getOrgIdFromSlug(potentialSlug).block() + } catch (HttpClientResponseException e) { + if (e.status == HttpStatus.NOT_FOUND) { + urlSlug = potentialSlug + } else { + throw e + } } } return urlSlug diff --git a/src/test/groovy/org/justserve/client/OrganizationClientSpec.groovy b/core/src/test/groovy/org/justserve/OrganizationClientSpec.groovy similarity index 67% rename from src/test/groovy/org/justserve/client/OrganizationClientSpec.groovy rename to core/src/test/groovy/org/justserve/OrganizationClientSpec.groovy index 212b897..b86e6d6 100644 --- a/src/test/groovy/org/justserve/client/OrganizationClientSpec.groovy +++ b/core/src/test/groovy/org/justserve/OrganizationClientSpec.groovy @@ -1,12 +1,14 @@ -package org.justserve.client - +package org.justserve import io.micronaut.http.HttpStatus import io.micronaut.http.client.exceptions.HttpClientResponseException -import org.justserve.JustServeSpec +import io.micronaut.test.extensions.spock.annotation.MicronautTest +import org.justserve.client.DynamicRoutingClient +import org.justserve.client.OrganizationClient import org.justserve.model.OrganizationCreateRequest import spock.lang.Shared +@MicronautTest class OrganizationClientSpec extends JustServeSpec { @Shared OrganizationClient noAuthClient @@ -23,36 +25,34 @@ class OrganizationClientSpec extends JustServeSpec { def "using searchByLocation() should work when using #title"() { when: def search = createSearchRequestForElkGrove() - def response = client.searchByLocation(search) + def response = client.searchByLocation(search).block() then: - response.status() == expectedStatus - if (expectedStatus == HttpStatus.OK) { - response.body() != null - response.body().organizations.size() > 0 - } + response != null + response.organizations.size() > 0 + where: - expectedStatus | client | title - HttpStatus.OK | authOrgClient | "auth client" - HttpStatus.OK | noAuthClient | "no auth client" + client | title + authOrgClient | "auth client" + noAuthClient | "no auth client" } def "get admins for a given org with no error"() { given: def search = createSearchRequestForElkGrove() - UUID orgID = client.searchByLocation(search).body().organizations.first.id + UUID orgID = client.searchByLocation(search).block().organizations.first.id when: - client.getOrgOwners(orgID) + client.getOrgOwners(orgID).block() then: noExceptionThrown() where: - expectedStatus | client | title - HttpStatus.OK | authOrgClient | "auth client" - HttpStatus.OK | noAuthClient | "no auth client" + client | title + authOrgClient | "auth client" + noAuthClient | "no auth client" } def "create an org with no error"() { @@ -70,7 +70,7 @@ class OrganizationClientSpec extends JustServeSpec { .setVolunteerCenterInfo(null) .setWebsite(faker.internet().url()) when: - authOrgClient.createOrganization(orgRequest) + authOrgClient.createOrganization(orgRequest).block() then: noExceptionThrown() @@ -88,19 +88,13 @@ class OrganizationClientSpec extends JustServeSpec { .setUrl(getUniqueSlug()) when: - def response = client.createOrganization(orgCreationRequest) + client.createOrganization(orgCreationRequest).block() then: - if (expectedStatus == HttpStatus.CREATED) { - null == response - return - } - def exception = thrown(HttpClientResponseException) - exception.status == expectedStatus + thrown(HttpClientResponseException) where: expectedStatus | client | title - HttpStatus.CREATED | authOrgClient | "auth client" HttpStatus.CREATED | noAuthClient | "no auth client" } diff --git a/src/test/groovy/org/justserve/client/ProjectClientSpec.groovy b/core/src/test/groovy/org/justserve/ProjectClientSpec.groovy similarity index 52% rename from src/test/groovy/org/justserve/client/ProjectClientSpec.groovy rename to core/src/test/groovy/org/justserve/ProjectClientSpec.groovy index f2d55c2..4e42d90 100644 --- a/src/test/groovy/org/justserve/client/ProjectClientSpec.groovy +++ b/core/src/test/groovy/org/justserve/ProjectClientSpec.groovy @@ -1,12 +1,11 @@ -package org.justserve.client +package org.justserve -import io.micronaut.http.HttpResponse -import org.justserve.JustServeSpec +import io.micronaut.test.extensions.spock.annotation.MicronautTest import org.justserve.model.* -import static io.micronaut.http.HttpStatus.OK import static org.justserve.model.DistanceType.MILES +@MicronautTest class ProjectClientSpec extends JustServeSpec { void "get project's current owner"(ProjectCard project) { @@ -14,12 +13,12 @@ class ProjectClientSpec extends JustServeSpec { GetProjectRequest projectRequest = new GetProjectRequest() def response = projectClient - .getProject((project as ProjectCard).getId(), "en-US", projectRequest) + .getProject((project as ProjectCard).getId(), "en-US", projectRequest).block() then: verifyAll { - response.body() != null - response.body().getProjectOwnerUserId() != null + response != null + response.getProjectOwnerUserId() != null } @@ -32,22 +31,18 @@ class ProjectClientSpec extends JustServeSpec { given: GetProjectRequest projectRequest = new GetProjectRequest() String locale = new Random().nextBoolean() ? " " : "en-US" - UUID currentOwner = projectClient.getProject((project as ProjectCard).getId(), locale, projectRequest) - .body().getProjectOwnerUserId() + UUID currentOwner = projectClient.getProject((project as ProjectCard).getId(), locale, projectRequest).block() + .getProjectOwnerUserId() ReassignProjectRequest reassignProjectRequest = new ReassignProjectRequest(readOnlyUser.uuid, currentOwner) when: - def response = projectClient.reassignProject((project as ProjectCard).getId(), reassignProjectRequest) + projectClient.reassignProject((project as ProjectCard).getId(), reassignProjectRequest).block() then: noExceptionThrown() verifyAll { - if (response.status() != OK) { - println "Warning: response status ${response.status()} != OK" - } else { - projectClient.getProject((project as ProjectCard).getId(), "en-US", projectRequest) - .body().getProjectOwnerUserId() == readOnlyUser.uuid - } + projectClient.getProject((project as ProjectCard).getId(), "en-US", projectRequest).block() + .getProjectOwnerUserId() == readOnlyUser.uuid } where: @@ -63,13 +58,32 @@ class ProjectClientSpec extends JustServeSpec { .setPublishedOnly(false).setIncludeFilledProjects(true).setDisasterRecoveryProjectsOnly(false).setTimesOfDay(null) when: - HttpResponse response = projectClient.searchProjects(request) + ProjectSearchResponse response = projectClient.searchProjects(request).block() then: verifyAll { - response.status == OK - response.body() != null - response.body().items != null + response != null + response.items != null + } + } + + void "can assign an organization to a project"() { + given: + def orgSearchResponse = authOrgClient.searchByLocation(createSearchRequestForElkGrove()).block() + UUID orgId = orgSearchResponse.organizations.first().id + ProjectCard project = searchResults.first() + + when: + projectClient.assignOrganizationToProject(project.getId(), orgId).block() + + then: + noExceptionThrown() + + + and: "validate that the reassignment worked - this is testing the underlying tech, not our codebase" + def updatedProject = projectClient.getProject(project.getId(), "en-US", new GetProjectRequest()).block() + verifyAll { + updatedProject.organization.organizationId == orgId } } diff --git a/src/test/groovy/org/justserve/TestUser.groovy b/core/src/test/groovy/org/justserve/TestUser.groovy similarity index 55% rename from src/test/groovy/org/justserve/TestUser.groovy rename to core/src/test/groovy/org/justserve/TestUser.groovy index e075641..2dda11d 100644 --- a/src/test/groovy/org/justserve/TestUser.groovy +++ b/core/src/test/groovy/org/justserve/TestUser.groovy @@ -6,7 +6,7 @@ import net.datafaker.providers.base.Address class TestUser { - public final String email, firstName, lastName, password, zipcode, countryCode, country, locale + public String email, firstName, lastName, password, zipcode, countryCode, country, locale public UUID uuid = null /** @@ -15,14 +15,14 @@ class TestUser { * @param faker seed for a faker, say a specific locale. */ TestUser(Faker faker) { - this.email = faker.internet().emailAddress(); - this.firstName = faker.name().firstName(); - this.lastName = faker.name().lastName(); + this.email = faker.internet().emailAddress() + this.firstName = faker.name().firstName() + this.lastName = faker.name().lastName() Address address = faker.address() - this.zipcode = address.zipCode(); - this.countryCode = address.countryCode(); - this.country = address.country(); + this.zipcode = address.zipCode() + this.countryCode = address.countryCode() + this.country = address.country() this.locale = faker.locality().localeString() - this.password = faker.credentials().password(8,100,true,true,true); + this.password = faker.credentials().password(8,100,true,true,true) } } diff --git a/core/src/test/groovy/org/justserve/UserClientSpec.groovy b/core/src/test/groovy/org/justserve/UserClientSpec.groovy new file mode 100644 index 0000000..757f39b --- /dev/null +++ b/core/src/test/groovy/org/justserve/UserClientSpec.groovy @@ -0,0 +1,107 @@ +package org.justserve + +import io.micronaut.http.client.exceptions.HttpClientResponseException +import io.micronaut.http.client.multipart.MultipartBody +import io.micronaut.test.extensions.spock.annotation.MicronautTest +import net.datafaker.Faker +import org.apache.commons.lang3.RandomStringUtils +import org.justserve.client.UserClient +import org.justserve.model.UserHashRequestByEmail + +import static io.micronaut.http.HttpStatus.UNAUTHORIZED + +@MicronautTest +class UserClientSpec extends JustServeSpec { + + def setupSpec() { + + } + + def "create user #{user.firstName} #{user.lastName} #{user.email} #{user.password} #{user.zipcode} #{user.locale} #{user.country} #{user.countryCode}"() { + given: + TestUser user = new TestUser(new Faker(Locale.of("en-us"))) + MultipartBody requestBody = MultipartBody.builder() + .addPart("firstName", user.firstName) + .addPart("lastName", user.lastName) + .addPart("email", RandomStringUtils.insecure().nextAlphanumeric(20) + "@fake.com") + .addPart("password", "JustServe2026") + .addPart("postal", user.zipcode) + .addPart("language", user.locale) + .addPart("countryCode", user.countryCode) + .addPart("country", user.country) + .addPart("termsChecked", "true") + .build() + when: + client.createUser(requestBody).block() + + then: + noExceptionThrown() + + where: + client | _ + adminUserClient | _ + noAuthUserClient | _ + } + + def "can get admin context for a user as an admin"(UserClient client) { + when: + def response = client.getAdminContext(readOnlyUser.uuid).block() + + then: + response != null + + where: + client | _ + adminUserClient | _ + } + + def "cannot get admin context for a user if not an admin"(UserClient client) { + when: + client.getAdminContext(readOnlyUser.uuid).block() + + then: + def exception = thrown(HttpClientResponseException) + exception.status == UNAUTHORIZED + + where: + client | _ + noAuthUserClient | _ + } + + def "can get tempPassword for a user as an admin"(UserClient client) { + when: + client.getTempPassword(new UserHashRequestByEmail(readOnlyUser.email)).block() + + then: + noExceptionThrown() + + where: + client | _ + adminUserClient | _ + } + + def "cannot get tempPassword for a user if not an admin"(UserClient client) { + when: + client.getTempPassword(new UserHashRequestByEmail(readOnlyUser.email)).block() + + then: + def exception = thrown(HttpClientResponseException) + exception.status == UNAUTHORIZED + + where: + client | _ + noAuthUserClient | _ + } + + def "can get all user information for a user as an admin"(UserClient client) { + when: + client.getAllUserInformation(readOnlyUser.uuid, true, true, 1).block() + + then: + noExceptionThrown() + + where: + client | _ + adminUserClient | _ + } +} diff --git a/core/src/test/resources/SpockConfig.groovy b/core/src/test/resources/SpockConfig.groovy new file mode 100644 index 0000000..267ec1e --- /dev/null +++ b/core/src/test/resources/SpockConfig.groovy @@ -0,0 +1,5 @@ +runner { + parallel { + enabled true + } +} \ No newline at end of file diff --git a/core/src/test/resources/application-test.yaml b/core/src/test/resources/application-test.yaml new file mode 100644 index 0000000..43b2a31 --- /dev/null +++ b/core/src/test/resources/application-test.yaml @@ -0,0 +1,10 @@ +micronaut: + http: + services: + justserve: + url: https://stage.justserve.org +justserve: + token: ${:i-need-to-be-defined} +logger: + levels: + io.micronaut.http.client: DEBUG \ No newline at end of file diff --git a/core/src/test/resources/projects.yaml b/core/src/test/resources/projects.yaml new file mode 100644 index 0000000..bce99e3 --- /dev/null +++ b/core/src/test/resources/projects.yaml @@ -0,0 +1,6 @@ +"Thrift Store Adventurers Needed!-Coeur d'Alene": "https://urldefense.com/v3/__https://v6q93rxd.r.us-east-1.awstrack.me/L0=/https:*2F*2Fwww.justserve.org*2Fprojects*2Ff001912b-256f-44b5-87a8-61e5e922a783/1/0100019b27fd352e-a7b03409-4c41-4863-b76a-524b7f84f180-000000/ENCW9TCkcy4N949_TX_jtes4S7A=3D457__;JSUlJQ!!Oz_3W2l6Vjs!5dejAA5tmpGXmMs_vdlbrwn4wHWu5ytbEcsfO4rx9OUup3ka-dRHFZEinoeDKzwDHUqRP5WvSOsZ5sS1l875dYifqtaS$" +"American Red Cross Blood Drive": "https://urldefense.com/v3/__https://v6q93rxd.r.us-east-1.awstrack.me/L0=/https:*2F*2Fwww.justserve.org*2Fprojects*2Ff0fdc9d2-2cd5-4b00-b186-9f1003a34fb8/1/0100019b27fd352e-a7b03409-4c41-4863-b76a-524b7f84f180-000000/SOIQKQKGlArjeL0JnyUDfNrR-Lw=3D457__;JSUlJQ!!Oz_3W2l6Vjs!5dejAA5tmpGXmMs_vdlbrwn4wHWu5ytbEcsfO4rx9OUup3ka-dRHFZEinoeDKzwDHUqRP5WvSOsZ5sS1l875detDYK5M$" +"Do you feel guilty because you cannot give Blood? Come be a Helper!": "https://urldefense.com/v3/__https://v6q93rxd.r.us-east-1.awstrack.me/L0=/https:*2F*2Fwww.justserve.org*2Fprojects*2Ff1a72ef2-d433-4885-a548-bcb52c959a3f/1/0100019b27fd352e-a7b03409-4c41-4863-b76a-524b7f84f180-000000/cd0nNSMKv8MqcesG-I0dDmvXOh4=3D457__;JSUlJQ!!Oz_3W2l6Vjs!5dejAA5tmpGXmMs_vdlbrwn4wHWu5ytbEcsfO4rx9OUup3ka-dRHFZEinoeDKzwDHUqRP5WvSOsZ5sS1l875dRo6H__T$" +"Saint Vincent de Paul North Idaho": "https://urldefense.com/v3/__https://v6q93rxd.r.us-east-1.awstrack.me/L0=/https:*2F*2Fwww.justserve.org*2Fprojects*2Ff2e21dfc-e132-46e5-a97f-801089574c6c/1/0100019b27fd352e-a7b03409-4c41-4863-b76a-524b7f84f180-000000/EUSJSjx5GFnIY4Uw8ZKFvmdP3UQ=3D457__;JSUlJQ!!Oz_3W2l6Vjs!5dejAA5tmpGXmMs_vdlbrwn4wHWu5ytbEcsfO4rx9OUup3ka-dRHFZEinoeDKzwDHUqRP5WvSOsZ5sS1l875dTNOaCdu$" +"Habitat for Humanity Neighborhood Cleanup Day": "https://urldefense.com/v3/__https://v6q93rxd.r.us-east-1.awstrack.me/L0=/https://:*2F*2Fwww.justserve.org*2Fprojects*2Ff642ff60-0ef4-4954-a7ba-e7333e16738b/1/0100019b27fd352e-a7b03409-4c41-4863-b76a-524b7f84f180-000000/tGCPal-9awkiaon1eX24YLGYNZU=3D457__;JSUlJQ!!Oz_3W2l6Vjs!5dejAA5tmpGXmMs_vdlbrwn4wHWu5ytbEcsfO4rx9OUup3ka-dRHFZEinoeDKzwDHUqRP5WvSOsZ5sS1l875dUyrxvy0$" +"Food Distribution, We Care Wednesday at MCC - Red Mountain Campus":"https://urldefense.com/v3/__https://v6q93rxd.r.us-east-1.awstrack.me/L0/https:*2F*2Fwww.justserve.org*2Fprojects*2F8184d4d4-2dfb-4199-9d2a-11bda765c288/1/0100019bc2cbfb3e-33585837-0f77-4978-b48a-1d8fe489f936-000000/EsqZuRxunV83UlT-3N1fZvayHzU=461__;JSUlJQ!!Oz_3W2l6Vjs!5FRNJDgSZdVQY1WZC5qDdcbVhIzjWrwEJSBXx8R7ZHcnUGwDbycnt03KfRWH_whZUfComJrsZ5aUFLWp1pMiUSHaTnINujhNU9M$" \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index 8b86abd..ae6e0ea 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,3 +1,16 @@ micronautVersion=4.8.3 -justserveCliVersion=0.0.7 +justserveCliVersion=0.1.0 org.gradle.console=rich +micronautLibraryVersion=4.5.3 +micronautOpenapiVersion=4.5.3 +jarTestVersion=1.1.0 +simpleJavaMailVersion=8.12.6 +jsoupVersion=1.21.2 +datafakerVersion=2.5.1 +commonsLang3Version=3.20.0 +micronautOpenapiSpecVersion=6.20.0 +jansiGraalvmVersion=1.2.0 +jansiVersion=2.4.2 +picocliShellVersion=4.7.6 +jlineVersion=3.30.5 +commonsLangVersion=3.20.0 \ No newline at end of file diff --git a/justserve text b/justserve text new file mode 100644 index 0000000..f30f31e --- /dev/null +++ b/justserve text @@ -0,0 +1,7 @@ + _ _ ____ + | | | | / ___| + | |_ _ ___| |_| (___ ___ _ ____ _____ + | | | | / __| __|\___ \ / _ \ '__\ \ / / _ \ + ___| | |_| \__ \ |_ ____) | __/ | \ V / __/ +|____/ \__,_|___/\__|_____/ \___|_| \_/ \___| + diff --git a/observer/build.gradle.kts b/observer/build.gradle.kts new file mode 100644 index 0000000..a7cfa7f --- /dev/null +++ b/observer/build.gradle.kts @@ -0,0 +1,66 @@ +plugins { + id("groovy") + id("io.micronaut.application") + id("com.gradleup.shadow") + id("io.micronaut.aot") +} + +version = "0.1" +group = "org.justserve.devkit" + + + +repositories { + mavenCentral() +} + +dependencies { + annotationProcessor("org.projectlombok:lombok") + annotationProcessor("io.micronaut:micronaut-http-validation") + annotationProcessor("io.micronaut.micrometer:micronaut-micrometer-annotation") + annotationProcessor("io.micronaut.serde:micronaut-serde-processor") + implementation("io.micronaut:micronaut-management") + implementation("io.micronaut.micrometer:micronaut-micrometer-core") + implementation("io.micronaut.micrometer:micronaut-micrometer-observation") + implementation("io.micronaut.micrometer:micronaut-micrometer-registry-prometheus") + implementation("io.micronaut.serde:micronaut-serde-jackson") + implementation(project(":core")) + compileOnly("io.micronaut:micronaut-http-client") + compileOnly("org.projectlombok:lombok") + runtimeOnly("ch.qos.logback:logback-classic") + runtimeOnly("org.yaml:snakeyaml") + testImplementation("io.micronaut:micronaut-http-client") +} + + + +application { + mainClass = "org.justserve.devkit.Application" +} + +java { + sourceCompatibility = JavaVersion.toVersion("21") + targetCompatibility = JavaVersion.toVersion("21") +} + +micronaut { + runtime("netty") + testRuntime("spock2") + processing { + incremental(true) + annotations("org.justserve.devkit.*") + } + aot { + // Please review carefully the optimizations enabled below + // Check https://micronaut-projects.github.io/micronaut-aot/latest/guide/ for more details + optimizeServiceLoading = false + convertYamlToJava = false + precomputeOperations = true + cacheEnvironment = true + optimizeClassLoading = true + deduceEnvironment = true + optimizeNetty = true + replaceLogbackXml = true + } + +} diff --git a/observer/src/main/java/org/justserve/devkit/Application.java b/observer/src/main/java/org/justserve/devkit/Application.java new file mode 100644 index 0000000..ec3bb1d --- /dev/null +++ b/observer/src/main/java/org/justserve/devkit/Application.java @@ -0,0 +1,10 @@ +package org.justserve.devkit; + +import io.micronaut.runtime.Micronaut; + +public class Application { + + public static void main(String[] args) { + Micronaut.run(Application.class, args); + } +} \ No newline at end of file diff --git a/observer/src/main/resources/application.yml b/observer/src/main/resources/application.yml new file mode 100644 index 0000000..a970cfc --- /dev/null +++ b/observer/src/main/resources/application.yml @@ -0,0 +1,10 @@ +micronaut: + application: + name: observer + metrics: + enabled: true + export: + prometheus: + enabled: true + descriptions: true + step: PT1M diff --git a/observer/src/main/resources/logback.xml b/observer/src/main/resources/logback.xml new file mode 100644 index 0000000..2d77bda --- /dev/null +++ b/observer/src/main/resources/logback.xml @@ -0,0 +1,14 @@ + + + + + + %cyan(%d{HH:mm:ss.SSS}) %gray([%thread]) %highlight(%-5level) %magenta(%logger{36}) - %msg%n + + + + + + + diff --git a/observer/src/test/groovy/org/justserve/devkit/ObserverSpec.groovy b/observer/src/test/groovy/org/justserve/devkit/ObserverSpec.groovy new file mode 100644 index 0000000..c6bb1fb --- /dev/null +++ b/observer/src/test/groovy/org/justserve/devkit/ObserverSpec.groovy @@ -0,0 +1,20 @@ +package org.justserve.devkit + + +import io.micronaut.runtime.EmbeddedApplication +import io.micronaut.test.extensions.spock.annotation.MicronautTest +import spock.lang.Specification +import jakarta.inject.Inject + +@MicronautTest +class ObserverSpec extends Specification { + + @Inject + EmbeddedApplication application + + void 'test it works'() { + expect: + application.running + } + +} diff --git a/observer/src/test/resources/Application-test.yaml b/observer/src/test/resources/Application-test.yaml new file mode 100644 index 0000000..e69de29 diff --git a/observer/src/test/resources/SpockConfig.groovy b/observer/src/test/resources/SpockConfig.groovy new file mode 100644 index 0000000..e69de29 diff --git a/settings.gradle b/settings.gradle index ab46ea3..16f22c7 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1 +1,20 @@ -rootProject.name="justserve-cli" \ No newline at end of file +pluginManagement { + repositories { + gradlePluginPortal() + mavenCentral() + } +} + +enableFeaturePreview 'TYPESAFE_PROJECT_ACCESSORS' + +rootProject.name="devkit" + +include "core" +include "cli" +include "observer" + +dependencyResolutionManagement { + repositories { + mavenCentral() + } +} \ No newline at end of file diff --git a/src/docs/asciidoc/index.adoc b/src/docs/asciidoc/index.adoc deleted file mode 100644 index d1c7c9a..0000000 --- a/src/docs/asciidoc/index.adoc +++ /dev/null @@ -1,84 +0,0 @@ -= JustServe CLI User Guide -:toc: left -:toclevels: 2 -:sectnums: - -An administrative command-line tool for JustServe Specialists and administrators. - -== Prerequisites - -Before using the CLI, you must authenticate your session. - -. Set the `JUSTSERVE_TOKEN` environment variable with a valid API token obtained from the JustServe platform. -+ -[source,powershell] ----- -# For PowerShell (Windows) -$env:JUSTSERVE_TOKEN = "your_api_token_here" ----- -+ -[source,bash] ----- -# For Bash (Linux/macOS) -export JUSTSERVE_TOKEN="your_api_token_here" ----- -+ -[NOTE] -==== -This token is used to authorize your requests to the JustServe API. Ensure it has the necessary permissions for the operations you intend to perform. -==== - -== Usage - -The primary command is `justserve`. You can run it from your terminal once you have the executable file. - -=== Generating a Temporary Password - -The main function of this tool is to generate a new temporary password for a user, which is useful for resolving account access issues. - -To generate a password, use the `--email` or `-e` option, followed by the user's email address. - -.Command Syntax -[source,bash] ----- -./justserve --email ----- - -.Example Request -[source,bash] ----- -./justserve --email user@example.com ----- - -If the request is successful, the tool will print the new temporary password directly to the console. - -.Example Success Output ----- -t3mpP@ssw0rd! ----- - -=== Checking the Tool Version - -To display the current version of the `justserve-cli` tool, use the `--version` or `-v` flag. This is helpful for ensuring you are using the latest release. - -.Command Syntax -[source,bash] ----- -./justserve --version ----- - -.Example Output -[source,text] ----- -0.0.3-SNAPSHOT ----- - -== Error Handling - -If the tool encounters an issue—such as an invalid email, an authentication failure, or a server-side problem—it will print a descriptive error message to the standard error stream. - -.Example Error Output -[source,text] ----- -received an unexpected response from JustServe: 404 (Not Found) ----- \ No newline at end of file diff --git a/src/main/java/org/justserve/cli/command/ConsoleOutput.java b/src/main/java/org/justserve/cli/command/ConsoleOutput.java deleted file mode 100644 index 00c03b0..0000000 --- a/src/main/java/org/justserve/cli/command/ConsoleOutput.java +++ /dev/null @@ -1,43 +0,0 @@ -package org.justserve.cli.command; - -public interface ConsoleOutput { - ConsoleOutput NOOP = new ConsoleOutput() { - @Override - public void out(String message) { } - - @Override - public void err(String message) { } - - @Override - public void warning(String message) { } - - @Override - public boolean showStacktrace() { - return false; - } - - @Override - public boolean verbose() { - return false; - } - - }; - - void out(String message); - - void err(String message); - - void warning(String message); - - boolean showStacktrace(); - - boolean verbose(); - - default void green(String message) { - out(message); - } - - default void red(String message) { - out(message); - } -} diff --git a/src/test/groovy/org/justserve/cli/command/MakeOrgAdminSpec.groovy b/src/test/groovy/org/justserve/cli/command/MakeOrgAdminSpec.groovy deleted file mode 100644 index f465bd6..0000000 --- a/src/test/groovy/org/justserve/cli/command/MakeOrgAdminSpec.groovy +++ /dev/null @@ -1,78 +0,0 @@ -package org.justserve.cli.command - -import io.micronaut.context.ApplicationContext -import spock.lang.Execution - -import static org.spockframework.runtime.model.parallel.ExecutionMode.SAME_THREAD - -@Execution(SAME_THREAD) -class MakeOrgAdminSpec extends BaseCommandSpec { - - def "can make a user an admin to #orgCount org(s) using the #orgFlag and #userFlag flags #title"() { - given: - UUID userID = createUser().body().id - def orgs = createOrgs(orgCount).join(",") - - when: - def (outputStream, errorStream) = executeCommand(context as ApplicationContext, ["makeOrgAdmin", orgFlag, orgs, userFlag, userID] as String[]) - - then: - if (context == noAuthCtx) { - verifyAll { - errorStream.matches(tokenNotSetRegex) - outputStream.matches(blankRegex) - } - return - } - verifyAll { - (outputStream as String).contains("successfully reassigned ${orgCount} orgs to user ${userID}") - errorStream.matches(blankRegex) - } - - where: - orgFlag | orgCount | userFlag | context | title | _ - "-o" | 3 | "-u" | ctx | "as an authorized user successfully makes the changes" | _ - "--org" | 3 | "-u" | ctx | "as an authorized user successfully makes the changes" | _ - "-o" | 3 | "--user" | ctx | "as an authorized user successfully makes the changes" | _ - "-o" | 3 | "-u" | noAuthCtx | "as unauthorized user and fails prior to making any api call" | _ - "--org" | 3 | "-u" | noAuthCtx | "as unauthorized user and fails prior to making any api call" | _ - "-o" | 3 | "--user" | noAuthCtx | "as unauthorized user and fails prior to making any api call" | _ - "-o" | 1 | "-u" | noAuthCtx | "as unauthorized user and fails prior to making any api call" | _ - "--org" | 1 | "-u" | noAuthCtx | "as unauthorized user and fails prior to making any api call" | _ - "-o" | 1 | "--user" | noAuthCtx | "as unauthorized user and fails prior to making any api call" | _ - "-o" | 1 | "-u" | ctx | "as an authorized user successfully makes the changes" | _ - "--org" | 1 | "-u" | ctx | "as an authorized user successfully makes the changes" | _ - "-o" | 1 | "--user" | ctx | "as an authorized user successfully makes the changes" | _ - } - - def "can make a user an admin to #orgCount where at least one org ID does not exist on JustServe"() { - given: - UUID userID = createUser().body().id - String orgs - def fakeId = faker.internet().uuid().toString() - if (orgCount == 1) { - orgs = fakeId - } else { - orgs = createOrgs(orgCount - 1).join(",") + "," + fakeId - } - - when: - def (outputStream, errorStream) = executeCommand(context as ApplicationContext, ["makeOrgAdmin", orgFlag, orgs, userFlag, userID] as String[]) - - then: - verifyAll { - (outputStream as String).contains("successfully reassigned ${orgCount - 1 } orgs to user ${userID}") - (errorStream as String).contains("Failed to make user ${userID} an admin for organization ${fakeId}.") - } - - where: - orgFlag | orgCount | userFlag | context | title | _ - "-o" | 3 | "-u" | ctx | "as an authorized user successfully makes the changes" | _ - "--org" | 3 | "-u" | ctx | "as an authorized user successfully makes the changes" | _ - "-o" | 3 | "--user" | ctx | "as an authorized user successfully makes the changes" | _ - "-o" | 1 | "-u" | ctx | "as an authorized user successfully makes the changes" | _ - "--org" | 1 | "-u" | ctx | "as an authorized user successfully makes the changes" | _ - "-o" | 1 | "--user" | ctx | "as an authorized user successfully makes the changes" | _ - } - -} diff --git a/src/test/groovy/org/justserve/cli/command/UnReassignProjectsSpec.groovy b/src/test/groovy/org/justserve/cli/command/UnReassignProjectsSpec.groovy deleted file mode 100644 index a680f2d..0000000 --- a/src/test/groovy/org/justserve/cli/command/UnReassignProjectsSpec.groovy +++ /dev/null @@ -1,65 +0,0 @@ -package org.justserve.cli.command - -import io.micronaut.core.io.ResourceResolver -import io.micronaut.test.extensions.spock.annotation.MicronautTest -import jakarta.inject.Inject -import org.justserve.util.EmailParser -import spock.lang.Execution -import spock.lang.Shared - -import java.util.stream.Collectors -import java.util.stream.Stream - -import static org.spockframework.runtime.model.parallel.ExecutionMode.SAME_THREAD - -@Execution(SAME_THREAD) -@MicronautTest -class UnReassignProjectsSpec extends BaseCommandSpec { - - @Inject - @Shared - ResourceResolver resourceResolver - - @Shared - File tempEmlFile - - @Shared - Map testEmails - - def setupSpec() { - testEmails = new HashMap<>() - Stream.of("sara-anderson-email.eml", "test-with-automated-email.eml", "test-without-automated-email.eml").forEach { file -> - def resource = resourceResolver.getResourceAsStream("classpath:$file") - resource.ifPresent { stream -> - try (BufferedReader reader = new BufferedReader(new InputStreamReader(stream))) { - testEmails.put(file.replace(".eml", ""), reader.lines().collect(Collectors.joining(System.lineSeparator()))) - } catch (IOException e) { - throw new RuntimeException("Failed to read test file: $file", e) - } - } - } - } - - def "can make reassignments from #title to a user"(String title, String fileContent) { - given: - if (title.contains("without")) { - return - } - String testFile = new File(resourceResolver.getResource("classpath:${title}.eml").get().toURI()).absolutePath - def args = ["unReassignProjects", "-u", readOnlyUser.uuid.toString(), "-f", testFile] - def projectCount = EmailParser.getProjects(fileContent).values().flatten().size() - - when: - def (outputStream, errorStream) = executeCommand(ctx, args as String[]) - - then: - errorStream.matches(blankRegex) - projects.each { project -> - outputStream.contains(project.id.toString()) - } - outputStream.contains("Successfully reassigned ${projectCount} projects to user ${readOnlyUser.uuid}") - - where: - [title, fileContent] << testEmails.collect { key, value -> [key, value] } - } -} diff --git a/src/test/groovy/org/justserve/client/BoundaryPermissionSpec.groovy b/src/test/groovy/org/justserve/client/BoundaryPermissionSpec.groovy deleted file mode 100644 index ad32930..0000000 --- a/src/test/groovy/org/justserve/client/BoundaryPermissionSpec.groovy +++ /dev/null @@ -1,46 +0,0 @@ -package org.justserve.client - -import io.micronaut.http.HttpResponse -import io.micronaut.http.client.exceptions.HttpClientResponseException -import org.justserve.JustServeSpec -import spock.lang.Shared - -import static io.micronaut.http.HttpStatus.INTERNAL_SERVER_ERROR - -class BoundaryPermissionSpec extends JustServeSpec { - - @Shared - BoundaryPermissionClient noAuthBoundaryPermissionClient, authBoundaryPermissionClient - - def setupSpec() { - noAuthBoundaryPermissionClient = noAuthCtx.getBean(BoundaryPermissionClient) - authBoundaryPermissionClient = ctx.getBean(BoundaryPermissionClient) - } - - def "can reassign organizations #title"() { - given: - UUID userID = createUser().body().id - - when: - HttpResponse response = authBoundaryPermissionClient.makeAdminForOrg(orgID, userID) - - then: - if (!expectedError) { - verifyAll { - null == response.body() - authOrgClient.getOrgOwners(orgID).body().stream().anyMatch { user -> (user.id == userID) } - } - return - } - def exception = thrown(HttpClientResponseException) - exception.status == expectedError - - where: - client | expectedError | title | orgID | _ - authBoundaryPermissionClient | null | "with a good OrgID as an admin and the request succeeds" | createOrg() | _ - noAuthBoundaryPermissionClient | INTERNAL_SERVER_ERROR | "with a bad OrgID as an admin and the request fails" | UUID.fromString(faker.internet().uuid().toString()) | _ -// noAuthBoundaryPermissionClient | UNAUTHORIZED | "as an unauthorized user and the request fails" | createOrg() | _ - } - - -} diff --git a/src/test/groovy/org/justserve/client/DynamicRoutingClientSpec.groovy b/src/test/groovy/org/justserve/client/DynamicRoutingClientSpec.groovy deleted file mode 100644 index 16bb270..0000000 --- a/src/test/groovy/org/justserve/client/DynamicRoutingClientSpec.groovy +++ /dev/null @@ -1,37 +0,0 @@ -package org.justserve.client - -import io.micronaut.http.HttpResponse -import io.micronaut.http.HttpStatus -import org.justserve.JustServeSpec -import org.justserve.model.DynamicRoutingDataResponse -import spock.lang.Shared - -class DynamicRoutingClientSpec extends JustServeSpec { - - @Shared - DynamicRoutingClient noAuthClient, authClient - - - def setupSpec() { - noAuthClient = noAuthCtx.getBean(DynamicRoutingClient) - authClient = ctx.getBean(DynamicRoutingClient) - } - - def "get orgId for #url"() { - when: - HttpResponse response = client.getOrgIdFromSlug(url) - - then: - response.status() == expectedStatus - if (expectedStatus == HttpStatus.OK) { - response.body().id != null - } - - where: - url | expectedStatus | client - "accessleisure_sacramento" | HttpStatus.OK | authClient //TODO add actual orgs, not hardtyped ones - "accessleisure_sacramento" | HttpStatus.OK | noAuthClient - "1234" | HttpStatus.NOT_FOUND | authClient - "1234" | HttpStatus.NOT_FOUND | noAuthClient - } -} diff --git a/src/test/groovy/org/justserve/client/UserClientSpec.groovy b/src/test/groovy/org/justserve/client/UserClientSpec.groovy deleted file mode 100644 index f8f36bd..0000000 --- a/src/test/groovy/org/justserve/client/UserClientSpec.groovy +++ /dev/null @@ -1,63 +0,0 @@ -package org.justserve.client - -import io.micronaut.http.client.exceptions.HttpClientResponseException -import net.datafaker.Faker -import org.justserve.JustServeSpec -import org.justserve.TestUser -import org.justserve.model.UserHashRequestByEmail - -import static io.micronaut.http.HttpStatus.UNAUTHORIZED - -class UserClientSpec extends JustServeSpec { - - def "create user #{user.firstname} #{user.lastname} #{user.email} #{user.password} #{user.postal} #{user.locale} #{user.country} #{user.countryCode}"() { - when: - TestUser user = new TestUser(new Faker(Locale.of("en-us"))) - then: - createUser(client, user) - - where: - client | _ - userClient | _ - noAuthUserClient | _ - } - - def "get admin context for a generated user with as an admin"() { - //todo: add user with admin context to testing - when: - def response = client.getAdminContext(readOnlyUser.uuid) - - then: - if (!expectedError) { - response.body() != null - return - } - def exception = thrown(HttpClientResponseException) - exception.status == expectedError - - where: - expectedError | client | _ - null | userClient | _ - UNAUTHORIZED | noAuthUserClient | _ - - } - - def "get tempPassword for a previously created user"() { - given: - when: - def response = client.getTempPassword(new UserHashRequestByEmail(readOnlyUser.email)) - - then: - if (!expectedError) { - response.body() != null - return - } - def exception = thrown(HttpClientResponseException) - exception.status == expectedError - - where: - expectedError | client | _ - null | userClient | _ - UNAUTHORIZED | noAuthUserClient | _ - } -} diff --git a/src/test/groovy/org/justserve/util/TestEmailGenerator.groovy b/src/test/groovy/org/justserve/util/TestEmailGenerator.groovy deleted file mode 100644 index dfa67a0..0000000 --- a/src/test/groovy/org/justserve/util/TestEmailGenerator.groovy +++ /dev/null @@ -1,128 +0,0 @@ -package org.justserve.util - -import net.datafaker.Faker -import org.justserve.TestUser -import org.justserve.model.ProjectCard - -class TestEmailGenerator { - - static String generateMockEmlContent(List projects, TestUser recipient) { - StringBuilder sb = new StringBuilder() - sb.append("From: JustServe \n") - sb.append("To: " + recipient.firstName + " " + recipient.lastName + " <" + recipient.email + ">\n") - sb.append("Subject: Project Reassignment\n") - sb.append("Content-Type: text/html; charset=\"UTF-8\"\n") - sb.append("Content-Transfer-Encoding: 8bit\n\n") - - String recipientName = recipient.firstName + " " + recipient.lastName - String recipientEmail = recipient.email - Faker faker = new Faker() - String senderName = faker.name().fullName() - - String htmlTemplateStart = """
    Here you go.  Thx for your help.  

    ---------- Forwarded message ---------
    From: JustServe.org <noreply-js@mail.justserve.org>
    Date: Tue, Dec 16, 2025 at 8:27 AM
    Subject: Project Reassignment
    To: <${recipientEmail}>


    - - - - -
    - - - - - - - - - - - - - - - - - - -
    - - - - - - - - - - - - - -
    - Logo Title -
    - - - - - - - - - - -
    Project Reassignment
    -

    - - The following projects have been reassigned from ${senderName}, to ${recipientName}, by ${senderName}: - -

    -
      """ - - String htmlTemplateEnd = """
    -

    - - ${recipientName} can now access these projects in their manage projects page for editing. - -

    -
    -
    -
    - - - - - - - - - - - - - - -
    -

    JustServe.org is provided as a service by The Church of Jesus Christ of Latter-day Saints.

    -

    © 2020 by Intellectual Reserve, Inc. All rights reserved.

    -

    50 East North Temple, Salt Lake City, Utah, 84150

    -

    Terms of Use (Updated 8/12/2021) | Privacy Notice (Updated 10/12/2022)

    -

    This email was sent to: ${recipientEmail}

    -

    If you would like to stop receiving these types of emails you may unsubscribe from your account settings page.

    -
    -
    - -
    -


    --
    ${recipientName}
    JustServe Assistant Area Director
    Northern California 
    925-699-1395  Cell and Text



    -""" - - sb.append(htmlTemplateStart) - - projects.each { project -> - String uglyUrl = "https://urldefense.com/v3/__https://v6q93rxd.r.us-east-1.awstrack.me/L0/https:*2F*2Fwww.justserve.org*2Fprojects*2F" + project.id + "/1/0100019b27fd352e-a7b03409-4c41-4863-b76a-524b7f84f180-000000/DNbIEdheshbb39W79A1Ru2ox05c=3D457__;JSUlJQ!!Oz_3W2l6Vjs!5dejAA5tmpGXmMs_vdlbrwn4wHWu5ytbEcsfO4rx9OUup3ka-dRHFZEinoeDKzwDHUqRP5WvSOsZ5sS1l875dafyqVS6\$" - sb.append("
  • ").append(project.title).append("
  • ") - } - - sb.append(htmlTemplateEnd) - return sb.toString() - } -} diff --git a/src/test/resources/README.md b/src/test/resources/README.md deleted file mode 100644 index 7286b47..0000000 --- a/src/test/resources/README.md +++ /dev/null @@ -1,13 +0,0 @@ -# Test Email Files - -To properly run the `EmailParserSpec` tests, you need to provide your own `.eml` files in this directory, as the original files contain Personally Identifiable Information (PII) and cannot be committed to Git. - -Please include two types of email files: - -1. **With Automated Content:** An email that **contains** the standard JustServe automated email footer. The filename for this file must include the word `with`. - * Example: `email-with-content.eml` - -2. **Without Automated Content:** An email that **does not contain** the standard JustServe automated email footer. The filename for this file must include the word `without`. - * Example: `email-without-content.eml` - -The tests are designed to dynamically find and parse any `.eml` files in this directory and will assert different outcomes based on whether "with" or "without" is present in the filename.