diff --git a/backend/app/controllers/api/v1/members_controller.rb b/backend/app/controllers/api/v1/members_controller.rb new file mode 100644 index 00000000..c965609d --- /dev/null +++ b/backend/app/controllers/api/v1/members_controller.rb @@ -0,0 +1,36 @@ +module API + module V1 + class MembersController < BaseController + load_and_authorize_resource except: :sign_in + + def me + render json: API::V1::MemberSerializer.new(current_member).serializable_hash + end + + def update + if @member.update(member_params) + render json: API::V1::MemberSerializer.new(@member).serializable_hash + else + raise API::UnprocessableEntityError, @member.errors.full_messages.to_sentence + end + end + + def sign_in + member = Member.find_by_email params[:email] + + if member&.valid_password?(params[:password]) + render json: {token: JWTAuth.encode(member)} + else + raise API::UnprocessableEntityError, I18n.t("devise.failure.invalid", authentication_keys: :email) + end + end + + private + + def member_params + p = params.permit :first_name, :last_name, :email, :password, :password_confirmation + p[:password].blank? ? p.except(:password, :password_confirmation) : p + end + end + end +end diff --git a/backend/app/controllers/api/v1/token_controller.rb b/backend/app/controllers/api/v1/token_controller.rb deleted file mode 100644 index 65bf9b77..00000000 --- a/backend/app/controllers/api/v1/token_controller.rb +++ /dev/null @@ -1,15 +0,0 @@ -module API - module V1 - class TokenController < BaseController - def create - member = Member.find_by_email params[:email] - - if member&.valid_password?(params[:password]) - render json: {token: JWTAuth.encode(member)} - else - raise API::UnprocessableEntityError, I18n.t("devise.failure.invalid", authentication_keys: :email) - end - end - end - end -end diff --git a/backend/app/models/ability.rb b/backend/app/models/ability.rb index 2ce0a19f..31926547 100644 --- a/backend/app/models/ability.rb +++ b/backend/app/models/ability.rb @@ -7,7 +7,7 @@ def initialize(member_or_admin) if member_or_admin.is_a?(Admin) @admin = member_or_admin admin_rights - else + elsif member_or_admin.is_a?(Member) @member = member_or_admin member_rights end @@ -28,6 +28,7 @@ def admin_rights end def member_rights + can %i[me update], Member, id: @member.id end def default_rights diff --git a/backend/app/models/member.rb b/backend/app/models/member.rb index bb9675cd..0502e3d3 100644 --- a/backend/app/models/member.rb +++ b/backend/app/models/member.rb @@ -5,7 +5,7 @@ class Member < ApplicationRecord validates_presence_of :first_name, :last_name - validates :password, length: {minimum: 12, message: :password_length} + validates :password, length: {minimum: 12, message: :password_length}, allow_nil: true validate :password_complexity def full_name diff --git a/backend/app/serializers/api/v1/member_serializer.rb b/backend/app/serializers/api/v1/member_serializer.rb new file mode 100644 index 00000000..d0f52787 --- /dev/null +++ b/backend/app/serializers/api/v1/member_serializer.rb @@ -0,0 +1,7 @@ +module API + module V1 + class MemberSerializer < BaseSerializer + attributes :id, :email, :first_name, :last_name, :created_at, :updated_at + end + end +end diff --git a/backend/app/services/jwt_auth.rb b/backend/app/services/jwt_auth.rb index 0f17c096..6559cb93 100644 --- a/backend/app/services/jwt_auth.rb +++ b/backend/app/services/jwt_auth.rb @@ -5,6 +5,9 @@ class JWTAuth def self.encode(member) payload = { member_id: member.id, + first_name: member.first_name, + last_name: member.last_name, + email: member.email, exp: 1.week.from_now.to_i } JWT.encode payload, SECRET, ALGORITHM diff --git a/backend/config/routes/api.rb b/backend/config/routes/api.rb index 5d081a93..d3ba30fc 100644 --- a/backend/config/routes/api.rb +++ b/backend/config/routes/api.rb @@ -32,7 +32,12 @@ get :download end end - resources :token, only: %i[create] + resources :members, only: %i[update] do + collection do + get :me + post :sign_in + end + end resource :reset_password, only: [:create, :update] end end diff --git a/backend/spec/fixtures/snapshots/api/v1/get-member-me.json b/backend/spec/fixtures/snapshots/api/v1/get-member-me.json new file mode 100644 index 00000000..590afcd8 --- /dev/null +++ b/backend/spec/fixtures/snapshots/api/v1/get-member-me.json @@ -0,0 +1,14 @@ +{ + "data": { + "id": "f1908e5b-0281-40c1-a045-40451156a8b3", + "type": "member", + "attributes": { + "id": "f1908e5b-0281-40c1-a045-40451156a8b3", + "email": "admin1@example.com", + "first_name": "Dawna", + "last_name": "Block", + "created_at": "2024-12-25T15:24:15.424Z", + "updated_at": "2024-12-25T15:24:15.424Z" + } + } +} \ No newline at end of file diff --git a/backend/spec/fixtures/snapshots/api/v1/update-member.json b/backend/spec/fixtures/snapshots/api/v1/update-member.json new file mode 100644 index 00000000..6f75aadb --- /dev/null +++ b/backend/spec/fixtures/snapshots/api/v1/update-member.json @@ -0,0 +1,14 @@ +{ + "data": { + "id": "8e5c4b29-97f5-4379-b5ce-15cf730d991e", + "type": "member", + "attributes": { + "id": "8e5c4b29-97f5-4379-b5ce-15cf730d991e", + "email": "new@email.test", + "first_name": "New", + "last_name": "Name", + "created_at": "2024-12-25T15:40:17.982Z", + "updated_at": "2024-12-25T15:40:17.990Z" + } + } +} \ No newline at end of file diff --git a/backend/spec/requests/api/v1/members_spec.rb b/backend/spec/requests/api/v1/members_spec.rb new file mode 100644 index 00000000..8fe42be2 --- /dev/null +++ b/backend/spec/requests/api/v1/members_spec.rb @@ -0,0 +1,153 @@ +# This file was generated with rails g enum WidgetSlug + +require "swagger_helper" + +RSpec.describe "API V1 Members", type: :request do + path "/api/v1/members/{id}" do + put "Updates a member" do + tags "Member" + consumes "application/json" + produces "application/json" + security [Bearer: {}] + + include_context "with authorization" + + parameter name: :id, in: :path, type: :string + parameter name: :member_params, in: :body, schema: { + type: :object, + properties: { + first_name: {type: :string, nullable: true}, + last_name: {type: :string, nullable: true}, + email: {type: :string, nullable: true}, + password: {type: :string, nullable: true}, + password_confirmation: {type: :string, nullable: true} + } + } + + let(:member) { create :member } + let(:id) { member.id } + let(:member_params) { {} } + + response "200", :success do + schema type: :object, properties: {data: {"$ref" => "#/components/schemas/member"}} + + let(:Authorization) { "Bearer #{JWTAuth.encode(member)}" } + let(:member_params) do + { + first_name: "New", + last_name: "Name", + email: "new@email.test" + } + end + + run_test! + + it "matches snapshot", generate_swagger_example: true do + expect(response.body).to match_snapshot("api/v1/update-member") + end + + context "when updating password" do + let!(:old_password) { member.encrypted_password } + let(:member_params) do + { + password: "NewPassword123456", + password_confirmation: "NewPassword123456" + } + end + + it "returns 200" do + expect(response).to have_http_status(:ok) + expect(member.reload.encrypted_password).not_to eq(old_password) + end + end + end + + response "422", "Invalid attributes" do + schema "$ref" => "#/components/schemas/errors" + + let(:Authorization) { "Bearer #{JWTAuth.encode(member)}" } + let(:member_params) do + { + email: "invalid-email" + } + end + + run_test! + end + end + end + + path "/api/v1/members/me" do + get "Returns current member" do + tags "Member" + consumes "application/json" + produces "application/json" + security [Bearer: {}] + + include_context "with authorization" + + response "200", :success do + schema type: :object, properties: {data: {"$ref" => "#/components/schemas/member"}} + + let(:member) { create :member } + let(:Authorization) { "Bearer #{JWTAuth.encode(member)}" } + + run_test! + + it "matches snapshot", generate_swagger_example: true do + expect(response.body).to match_snapshot("api/v1/get-member-me") + end + end + end + end + + path "/api/v1/members/sign_in" do + post "Returns member access token" do + tags "Member" + consumes "application/json" + produces "application/json" + parameter name: :member_params, in: :body, schema: { + type: :object, + properties: { + email: {type: :string}, + password: {type: :string} + }, + required: ["email", "password"] + } + + response "200", :success do + schema type: :object, properties: { + token: {type: :string} + } + + let(:member) { create :member, password: password } + let(:password) { "SuperSecret6" } + let(:member_params) do + { + email: member.email, + password: password + } + end + + run_test! + + it "returns token", generate_swagger_example: true do + expect(response_json["token"]).not_to be_nil + end + end + + response "422", "Invalid credentials" do + schema "$ref" => "#/components/schemas/errors" + + let(:member_params) do + { + email: "wrong@email.com", + password: "wrongpassword" + } + end + + run_test! + end + end + end +end diff --git a/backend/spec/requests/api/v1/token_spec.rb b/backend/spec/requests/api/v1/token_spec.rb deleted file mode 100644 index 9e204d65..00000000 --- a/backend/spec/requests/api/v1/token_spec.rb +++ /dev/null @@ -1,55 +0,0 @@ -# This file was generated with rails g enum WidgetSlug - -require "swagger_helper" - -RSpec.describe "API V1 Token", type: :request do - path "/api/v1/token" do - post "Returns member access token" do - tags "Token" - consumes "application/json" - produces "application/json" - parameter name: :member_params, in: :body, schema: { - type: :object, - properties: { - email: {type: :string}, - password: {type: :string} - }, - required: ["email", "password"] - } - - response "200", :success do - schema type: :object, properties: { - token: {type: :string} - } - - let(:member) { create :member, password: password } - let(:password) { "SuperSecret6" } - let(:member_params) do - { - email: member.email, - password: password - } - end - - run_test! - - it "returns token", generate_swagger_example: true do - expect(response_json["token"]).not_to be_nil - end - end - - response "422", "Invalid credentials" do - schema "$ref" => "#/components/schemas/errors" - - let(:member_params) do - { - email: "wrong@email.com", - password: "wrongpassword" - } - end - - run_test! - end - end - end -end diff --git a/backend/spec/support/shared_examples/api/authorization_error.rb b/backend/spec/support/shared_examples/api/authorization_error.rb new file mode 100644 index 00000000..8ffe25be --- /dev/null +++ b/backend/spec/support/shared_examples/api/authorization_error.rb @@ -0,0 +1,11 @@ +require "swagger_helper" + +RSpec.shared_examples "with authorization" do + response "403", "Forbidden", generate_swagger_example: true do + let(:Authorization) { nil } + + schema "$ref" => "#/components/schemas/errors" + + run_test! + end +end diff --git a/backend/spec/swagger_helper.rb b/backend/spec/swagger_helper.rb index 0fa2bb0d..74ae382f 100644 --- a/backend/spec/swagger_helper.rb +++ b/backend/spec/swagger_helper.rb @@ -21,6 +21,12 @@ paths: {}, components: { securitySchemes: { + Bearer: { + type: :apiKey, + name: "Authorization", + in: :header, + description: "Your JWT token" + } }, schemas: { funder: { @@ -103,6 +109,25 @@ }, required: %w[id type attributes relationships] }, + member: { + type: :object, + properties: { + id: {type: :string}, + type: {type: :string}, + attributes: { + type: :object, + properties: { + id: {type: :string}, + first_name: {type: :string}, + last_name: {type: :string}, + email: {type: :string}, + created_at: {type: :string}, + updated_at: {type: :string} + } + } + }, + required: %w[id type attributes] + }, widget: { type: :object, properties: { diff --git a/backend/swagger/v1/swagger.yaml b/backend/swagger/v1/swagger.yaml index 49c7bfd5..a0969aed 100644 --- a/backend/swagger/v1/swagger.yaml +++ b/backend/swagger/v1/swagger.yaml @@ -734,7 +734,7 @@ paths: application/json: example: data: - - id: f9448b5a-87fc-4c6a-aaaa-38daa7556125 + - id: 76724697-c537-450d-80f4-95118bd3a474 type: funder attributes: name: Elbert Denesik @@ -772,31 +772,31 @@ paths: demographics_other: Dolores fugiat nesciunt accusantium. contact_email: lauren@ruecker.io logo: - small: http://localhost:4000/rails/active_storage/representations/redirect/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaEpJaWt3WldRM01tUXpaQzFrTWpjNExUUm1ZVGt0WVRZelpDMWlZVFUwWVRKbU5ERm1NallHT2daRlZBPT0iLCJleHAiOm51bGwsInB1ciI6ImJsb2JfaWQifX0=--c4ade4eebedbb8c27e2f339c97018e344d7018ee/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaDdCem9MWm05eWJXRjBTU0lJYW5CbkJqb0dSVlE2QzNKbGMybDZaVWtpRERJd01IZ3lNREFHT3daVSIsImV4cCI6bnVsbCwicHVyIjoidmFyaWF0aW9uIn19--8673702c2d856505736727890dcac6a632977811/picture.jpg - medium: http://localhost:4000/rails/active_storage/representations/redirect/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaEpJaWt3WldRM01tUXpaQzFrTWpjNExUUm1ZVGt0WVRZelpDMWlZVFUwWVRKbU5ERm1NallHT2daRlZBPT0iLCJleHAiOm51bGwsInB1ciI6ImJsb2JfaWQifX0=--c4ade4eebedbb8c27e2f339c97018e344d7018ee/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaDdCem9MWm05eWJXRjBTU0lJYW5CbkJqb0dSVlE2QzNKbGMybDZaVWtpRERnd01IZzRNREFHT3daVSIsImV4cCI6bnVsbCwicHVyIjoidmFyaWF0aW9uIn19--e82a96c0eabd93d914de4ef37febd98c36e0e275/picture.jpg - original: http://localhost:4000/rails/active_storage/blobs/redirect/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaEpJaWt3WldRM01tUXpaQzFrTWpjNExUUm1ZVGt0WVRZelpDMWlZVFUwWVRKbU5ERm1NallHT2daRlZBPT0iLCJleHAiOm51bGwsInB1ciI6ImJsb2JfaWQifX0=--c4ade4eebedbb8c27e2f339c97018e344d7018ee/picture.jpg + small: http://localhost:4000/rails/active_storage/representations/redirect/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaEpJaWt4TVdSbE1UazFOeTFrWWpOa0xUUmtNek10T0RFNE55MHhaV1ppT1RBM1lUWmlOVEVHT2daRlZBPT0iLCJleHAiOm51bGwsInB1ciI6ImJsb2JfaWQifX0=--fd60548c26bce78fce9db188f9f24bae0aa3d766/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaDdCem9MWm05eWJXRjBTU0lJYW5CbkJqb0dSVlE2QzNKbGMybDZaVWtpRERJd01IZ3lNREFHT3daVSIsImV4cCI6bnVsbCwicHVyIjoidmFyaWF0aW9uIn19--8673702c2d856505736727890dcac6a632977811/picture.jpg + medium: http://localhost:4000/rails/active_storage/representations/redirect/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaEpJaWt4TVdSbE1UazFOeTFrWWpOa0xUUmtNek10T0RFNE55MHhaV1ppT1RBM1lUWmlOVEVHT2daRlZBPT0iLCJleHAiOm51bGwsInB1ciI6ImJsb2JfaWQifX0=--fd60548c26bce78fce9db188f9f24bae0aa3d766/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaDdCem9MWm05eWJXRjBTU0lJYW5CbkJqb0dSVlE2QzNKbGMybDZaVWtpRERnd01IZzRNREFHT3daVSIsImV4cCI6bnVsbCwicHVyIjoidmFyaWF0aW9uIn19--e82a96c0eabd93d914de4ef37febd98c36e0e275/picture.jpg + original: http://localhost:4000/rails/active_storage/blobs/redirect/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaEpJaWt4TVdSbE1UazFOeTFrWWpOa0xUUmtNek10T0RFNE55MHhaV1ppT1RBM1lUWmlOVEVHT2daRlZBPT0iLCJleHAiOm51bGwsInB1ciI6ImJsb2JfaWQifX0=--fd60548c26bce78fce9db188f9f24bae0aa3d766/picture.jpg relationships: primary_office_state: data: - id: eebcef04-5392-483b-bc2a-618b1537739e + id: fa801a4c-5900-4c22-b312-a1e4e4add7a1 type: subgeographic primary_office_country: data: - id: 18ed1724-de41-4352-a77d-d8016c50fc68 + id: 60c86e98-73b1-47e1-aa1c-322fdd33e2f7 type: subgeographic subgeographics: data: - - id: 8c28c0d7-8abc-461d-bdb2-ecb80791a8b8 + - id: 1db81a44-36b0-4139-a7d7-d259c41d33d9 type: subgeographic subgeographic_ancestors: data: - - id: 8c28c0d7-8abc-461d-bdb2-ecb80791a8b8 + - id: 1db81a44-36b0-4139-a7d7-d259c41d33d9 type: subgeographic - - id: '07037494-c732-4ab5-9552-856e019fdb4f' + - id: c6bbe935-6a2c-456e-bd0c-0d4079ecfe32 type: subgeographic projects: data: [] - - id: 8a09a047-30da-43a9-8585-d48c5059df1c + - id: e1a5bd6c-fae6-4260-81be-ed324a756925 type: funder attributes: name: Msgr. Genaro Cronin @@ -834,17 +834,17 @@ paths: demographics_other: Placeat commodi libero et. contact_email: desmond_herzog@example.org logo: - small: http://localhost:4000/rails/active_storage/representations/redirect/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaEpJaWxsWm1Rd1pXWmpZeTAwTURFNExUUmxNamN0T0dVNU5TMHhNV0U1T0RCak9HRTNNR1FHT2daRlZBPT0iLCJleHAiOm51bGwsInB1ciI6ImJsb2JfaWQifX0=--0930ef44439aa7351f27caba1695ea4a487ea907/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaDdCem9MWm05eWJXRjBTU0lJYW5CbkJqb0dSVlE2QzNKbGMybDZaVWtpRERJd01IZ3lNREFHT3daVSIsImV4cCI6bnVsbCwicHVyIjoidmFyaWF0aW9uIn19--8673702c2d856505736727890dcac6a632977811/picture.jpg - medium: http://localhost:4000/rails/active_storage/representations/redirect/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaEpJaWxsWm1Rd1pXWmpZeTAwTURFNExUUmxNamN0T0dVNU5TMHhNV0U1T0RCak9HRTNNR1FHT2daRlZBPT0iLCJleHAiOm51bGwsInB1ciI6ImJsb2JfaWQifX0=--0930ef44439aa7351f27caba1695ea4a487ea907/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaDdCem9MWm05eWJXRjBTU0lJYW5CbkJqb0dSVlE2QzNKbGMybDZaVWtpRERnd01IZzRNREFHT3daVSIsImV4cCI6bnVsbCwicHVyIjoidmFyaWF0aW9uIn19--e82a96c0eabd93d914de4ef37febd98c36e0e275/picture.jpg - original: http://localhost:4000/rails/active_storage/blobs/redirect/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaEpJaWxsWm1Rd1pXWmpZeTAwTURFNExUUmxNamN0T0dVNU5TMHhNV0U1T0RCak9HRTNNR1FHT2daRlZBPT0iLCJleHAiOm51bGwsInB1ciI6ImJsb2JfaWQifX0=--0930ef44439aa7351f27caba1695ea4a487ea907/picture.jpg + small: http://localhost:4000/rails/active_storage/representations/redirect/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaEpJaWszWkRNM05EWTFPUzFrWmpaakxUUTFZVE10WWpBM09TMDFNakE1T1dJeU4yUTFaR1lHT2daRlZBPT0iLCJleHAiOm51bGwsInB1ciI6ImJsb2JfaWQifX0=--26b332a34a4823d1e3aaa878825b489bd2e51571/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaDdCem9MWm05eWJXRjBTU0lJYW5CbkJqb0dSVlE2QzNKbGMybDZaVWtpRERJd01IZ3lNREFHT3daVSIsImV4cCI6bnVsbCwicHVyIjoidmFyaWF0aW9uIn19--8673702c2d856505736727890dcac6a632977811/picture.jpg + medium: http://localhost:4000/rails/active_storage/representations/redirect/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaEpJaWszWkRNM05EWTFPUzFrWmpaakxUUTFZVE10WWpBM09TMDFNakE1T1dJeU4yUTFaR1lHT2daRlZBPT0iLCJleHAiOm51bGwsInB1ciI6ImJsb2JfaWQifX0=--26b332a34a4823d1e3aaa878825b489bd2e51571/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaDdCem9MWm05eWJXRjBTU0lJYW5CbkJqb0dSVlE2QzNKbGMybDZaVWtpRERnd01IZzRNREFHT3daVSIsImV4cCI6bnVsbCwicHVyIjoidmFyaWF0aW9uIn19--e82a96c0eabd93d914de4ef37febd98c36e0e275/picture.jpg + original: http://localhost:4000/rails/active_storage/blobs/redirect/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaEpJaWszWkRNM05EWTFPUzFrWmpaakxUUTFZVE10WWpBM09TMDFNakE1T1dJeU4yUTFaR1lHT2daRlZBPT0iLCJleHAiOm51bGwsInB1ciI6ImJsb2JfaWQifX0=--26b332a34a4823d1e3aaa878825b489bd2e51571/picture.jpg relationships: primary_office_state: data: - id: 253f970c-5992-4567-821c-ba81743bc1b5 + id: c5f1b467-c9eb-4a20-9b50-b66310353472 type: subgeographic primary_office_country: data: - id: 298a02bc-335e-4f1d-8aa6-6ca6053729c1 + id: e6c8da4f-7419-4234-a1a1-52e613e74e08 type: subgeographic subgeographics: data: [] @@ -852,7 +852,7 @@ paths: data: [] projects: data: [] - - id: 2327be9c-725d-412a-b10e-b58118165e76 + - id: aa1ee480-7ad6-4fcb-8c2a-50d615e56e8c type: funder attributes: name: Otha Kemmer @@ -890,17 +890,17 @@ paths: demographics_other: Enim repellat pariatur est. contact_email: dawna.block@example.org logo: - small: http://localhost:4000/rails/active_storage/representations/redirect/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaEpJaWt3TXpOa05tWXhNeTAyTURZMExUUmxPV0V0WVRabE5DMHlZVEZoWkRNelkyUXdNV1VHT2daRlZBPT0iLCJleHAiOm51bGwsInB1ciI6ImJsb2JfaWQifX0=--c31dec5aef8ee1318d16b9c172c5b0734b11b6bc/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaDdCem9MWm05eWJXRjBTU0lJYW5CbkJqb0dSVlE2QzNKbGMybDZaVWtpRERJd01IZ3lNREFHT3daVSIsImV4cCI6bnVsbCwicHVyIjoidmFyaWF0aW9uIn19--8673702c2d856505736727890dcac6a632977811/picture.jpg - medium: http://localhost:4000/rails/active_storage/representations/redirect/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaEpJaWt3TXpOa05tWXhNeTAyTURZMExUUmxPV0V0WVRabE5DMHlZVEZoWkRNelkyUXdNV1VHT2daRlZBPT0iLCJleHAiOm51bGwsInB1ciI6ImJsb2JfaWQifX0=--c31dec5aef8ee1318d16b9c172c5b0734b11b6bc/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaDdCem9MWm05eWJXRjBTU0lJYW5CbkJqb0dSVlE2QzNKbGMybDZaVWtpRERnd01IZzRNREFHT3daVSIsImV4cCI6bnVsbCwicHVyIjoidmFyaWF0aW9uIn19--e82a96c0eabd93d914de4ef37febd98c36e0e275/picture.jpg - original: http://localhost:4000/rails/active_storage/blobs/redirect/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaEpJaWt3TXpOa05tWXhNeTAyTURZMExUUmxPV0V0WVRabE5DMHlZVEZoWkRNelkyUXdNV1VHT2daRlZBPT0iLCJleHAiOm51bGwsInB1ciI6ImJsb2JfaWQifX0=--c31dec5aef8ee1318d16b9c172c5b0734b11b6bc/picture.jpg + small: http://localhost:4000/rails/active_storage/representations/redirect/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaEpJaWt3TUdGbE9EY3lOUzFpWXpkbUxUUmlaRFF0T1RVMllTMWxOVE5sTkRJM05UaGpPVGtHT2daRlZBPT0iLCJleHAiOm51bGwsInB1ciI6ImJsb2JfaWQifX0=--688ac8bd2692e419b3d5e4a4e803d067c4a64d60/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaDdCem9MWm05eWJXRjBTU0lJYW5CbkJqb0dSVlE2QzNKbGMybDZaVWtpRERJd01IZ3lNREFHT3daVSIsImV4cCI6bnVsbCwicHVyIjoidmFyaWF0aW9uIn19--8673702c2d856505736727890dcac6a632977811/picture.jpg + medium: http://localhost:4000/rails/active_storage/representations/redirect/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaEpJaWt3TUdGbE9EY3lOUzFpWXpkbUxUUmlaRFF0T1RVMllTMWxOVE5sTkRJM05UaGpPVGtHT2daRlZBPT0iLCJleHAiOm51bGwsInB1ciI6ImJsb2JfaWQifX0=--688ac8bd2692e419b3d5e4a4e803d067c4a64d60/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaDdCem9MWm05eWJXRjBTU0lJYW5CbkJqb0dSVlE2QzNKbGMybDZaVWtpRERnd01IZzRNREFHT3daVSIsImV4cCI6bnVsbCwicHVyIjoidmFyaWF0aW9uIn19--e82a96c0eabd93d914de4ef37febd98c36e0e275/picture.jpg + original: http://localhost:4000/rails/active_storage/blobs/redirect/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaEpJaWt3TUdGbE9EY3lOUzFpWXpkbUxUUmlaRFF0T1RVMllTMWxOVE5sTkRJM05UaGpPVGtHT2daRlZBPT0iLCJleHAiOm51bGwsInB1ciI6ImJsb2JfaWQifX0=--688ac8bd2692e419b3d5e4a4e803d067c4a64d60/picture.jpg relationships: primary_office_state: data: - id: 6106a0b1-81ea-4746-8838-a389b7390cd4 + id: f55a7b51-821f-496b-a93f-f9a4f4b751bd type: subgeographic primary_office_country: data: - id: 8e8d690b-d650-4697-91e1-12c1d90f87ac + id: 403662fd-1d3d-4e51-88c7-98a2e6883327 type: subgeographic subgeographics: data: [] @@ -908,7 +908,7 @@ paths: data: [] projects: data: [] - - id: e9b979e1-e622-44d1-88fa-55b2faa13825 + - id: 3563139c-56ed-4334-8a54-6afa5e2df182 type: funder attributes: name: Raymon Wisoky @@ -946,17 +946,17 @@ paths: demographics_other: Et quaerat omnis veniam. contact_email: jules_keeling@grimes-stokes.co logo: - small: http://localhost:4000/rails/active_storage/representations/redirect/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaEpJaWxsT0RsaE1qQTFZeTB6TnpaakxUUTRPV1l0T0RSa05TMWhZek16WlRWak0ySXdNVEFHT2daRlZBPT0iLCJleHAiOm51bGwsInB1ciI6ImJsb2JfaWQifX0=--07efd4d8c87445bb4799afa9777e9d30907e5688/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaDdCem9MWm05eWJXRjBTU0lJYW5CbkJqb0dSVlE2QzNKbGMybDZaVWtpRERJd01IZ3lNREFHT3daVSIsImV4cCI6bnVsbCwicHVyIjoidmFyaWF0aW9uIn19--8673702c2d856505736727890dcac6a632977811/picture.jpg - medium: http://localhost:4000/rails/active_storage/representations/redirect/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaEpJaWxsT0RsaE1qQTFZeTB6TnpaakxUUTRPV1l0T0RSa05TMWhZek16WlRWak0ySXdNVEFHT2daRlZBPT0iLCJleHAiOm51bGwsInB1ciI6ImJsb2JfaWQifX0=--07efd4d8c87445bb4799afa9777e9d30907e5688/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaDdCem9MWm05eWJXRjBTU0lJYW5CbkJqb0dSVlE2QzNKbGMybDZaVWtpRERnd01IZzRNREFHT3daVSIsImV4cCI6bnVsbCwicHVyIjoidmFyaWF0aW9uIn19--e82a96c0eabd93d914de4ef37febd98c36e0e275/picture.jpg - original: http://localhost:4000/rails/active_storage/blobs/redirect/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaEpJaWxsT0RsaE1qQTFZeTB6TnpaakxUUTRPV1l0T0RSa05TMWhZek16WlRWak0ySXdNVEFHT2daRlZBPT0iLCJleHAiOm51bGwsInB1ciI6ImJsb2JfaWQifX0=--07efd4d8c87445bb4799afa9777e9d30907e5688/picture.jpg + small: http://localhost:4000/rails/active_storage/representations/redirect/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaEpJaWsxT0ROallqYzNOaTFtWXpjNUxUUmxZekl0WVRRd1lpMDRaVFV6TnpJNVpEUXhOemNHT2daRlZBPT0iLCJleHAiOm51bGwsInB1ciI6ImJsb2JfaWQifX0=--24a1fb53cdf1710183f94412f601ecdc81f3dd6b/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaDdCem9MWm05eWJXRjBTU0lJYW5CbkJqb0dSVlE2QzNKbGMybDZaVWtpRERJd01IZ3lNREFHT3daVSIsImV4cCI6bnVsbCwicHVyIjoidmFyaWF0aW9uIn19--8673702c2d856505736727890dcac6a632977811/picture.jpg + medium: http://localhost:4000/rails/active_storage/representations/redirect/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaEpJaWsxT0ROallqYzNOaTFtWXpjNUxUUmxZekl0WVRRd1lpMDRaVFV6TnpJNVpEUXhOemNHT2daRlZBPT0iLCJleHAiOm51bGwsInB1ciI6ImJsb2JfaWQifX0=--24a1fb53cdf1710183f94412f601ecdc81f3dd6b/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaDdCem9MWm05eWJXRjBTU0lJYW5CbkJqb0dSVlE2QzNKbGMybDZaVWtpRERnd01IZzRNREFHT3daVSIsImV4cCI6bnVsbCwicHVyIjoidmFyaWF0aW9uIn19--e82a96c0eabd93d914de4ef37febd98c36e0e275/picture.jpg + original: http://localhost:4000/rails/active_storage/blobs/redirect/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaEpJaWsxT0ROallqYzNOaTFtWXpjNUxUUmxZekl0WVRRd1lpMDRaVFV6TnpJNVpEUXhOemNHT2daRlZBPT0iLCJleHAiOm51bGwsInB1ciI6ImJsb2JfaWQifX0=--24a1fb53cdf1710183f94412f601ecdc81f3dd6b/picture.jpg relationships: primary_office_state: data: - id: 2ef46a49-1450-4c1b-b941-daddeced8fa2 + id: 58e497b6-4c16-44f7-9deb-380dbbb86a38 type: subgeographic primary_office_country: data: - id: 182ca1c2-8fca-49c8-8f24-3787c00ece21 + id: df545178-ea7e-4c0f-8f75-045f652d0e24 type: subgeographic subgeographics: data: [] @@ -1028,7 +1028,7 @@ paths: application/json: example: data: - id: b43eb921-51a6-471d-89a0-891cbf1ede8b + id: 89b3865f-ae3d-43e9-9bcd-74c71840cd2c type: funder attributes: name: Otha Kemmer @@ -1067,27 +1067,27 @@ paths: demographics_other: Enim repellat pariatur est. contact_email: dawna.block@example.org logo: - small: http://localhost:4000/rails/active_storage/representations/redirect/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaEpJaWswTnpJeVlqSXpOeTB6TURobUxUUmpaakV0T0dKaE1DMDFOems0TVdNME5EZ3hOR01HT2daRlZBPT0iLCJleHAiOm51bGwsInB1ciI6ImJsb2JfaWQifX0=--96c5cf0d542c78b39605e25259607acb311d9da0/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaDdCem9MWm05eWJXRjBTU0lJYW5CbkJqb0dSVlE2QzNKbGMybDZaVWtpRERJd01IZ3lNREFHT3daVSIsImV4cCI6bnVsbCwicHVyIjoidmFyaWF0aW9uIn19--8673702c2d856505736727890dcac6a632977811/picture.jpg - medium: http://localhost:4000/rails/active_storage/representations/redirect/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaEpJaWswTnpJeVlqSXpOeTB6TURobUxUUmpaakV0T0dKaE1DMDFOems0TVdNME5EZ3hOR01HT2daRlZBPT0iLCJleHAiOm51bGwsInB1ciI6ImJsb2JfaWQifX0=--96c5cf0d542c78b39605e25259607acb311d9da0/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaDdCem9MWm05eWJXRjBTU0lJYW5CbkJqb0dSVlE2QzNKbGMybDZaVWtpRERnd01IZzRNREFHT3daVSIsImV4cCI6bnVsbCwicHVyIjoidmFyaWF0aW9uIn19--e82a96c0eabd93d914de4ef37febd98c36e0e275/picture.jpg - original: http://localhost:4000/rails/active_storage/blobs/redirect/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaEpJaWswTnpJeVlqSXpOeTB6TURobUxUUmpaakV0T0dKaE1DMDFOems0TVdNME5EZ3hOR01HT2daRlZBPT0iLCJleHAiOm51bGwsInB1ciI6ImJsb2JfaWQifX0=--96c5cf0d542c78b39605e25259607acb311d9da0/picture.jpg + small: http://localhost:4000/rails/active_storage/representations/redirect/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaEpJaWs0TnpSaFptWXlOQzB3TURjMkxUUmlNVEV0WW1aaU5DMW1NV1kwTmpKaE5qaGpZelFHT2daRlZBPT0iLCJleHAiOm51bGwsInB1ciI6ImJsb2JfaWQifX0=--a5a6f2b66b9973bf8bc144b742b15b2786f1e073/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaDdCem9MWm05eWJXRjBTU0lJYW5CbkJqb0dSVlE2QzNKbGMybDZaVWtpRERJd01IZ3lNREFHT3daVSIsImV4cCI6bnVsbCwicHVyIjoidmFyaWF0aW9uIn19--8673702c2d856505736727890dcac6a632977811/picture.jpg + medium: http://localhost:4000/rails/active_storage/representations/redirect/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaEpJaWs0TnpSaFptWXlOQzB3TURjMkxUUmlNVEV0WW1aaU5DMW1NV1kwTmpKaE5qaGpZelFHT2daRlZBPT0iLCJleHAiOm51bGwsInB1ciI6ImJsb2JfaWQifX0=--a5a6f2b66b9973bf8bc144b742b15b2786f1e073/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaDdCem9MWm05eWJXRjBTU0lJYW5CbkJqb0dSVlE2QzNKbGMybDZaVWtpRERnd01IZzRNREFHT3daVSIsImV4cCI6bnVsbCwicHVyIjoidmFyaWF0aW9uIn19--e82a96c0eabd93d914de4ef37febd98c36e0e275/picture.jpg + original: http://localhost:4000/rails/active_storage/blobs/redirect/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaEpJaWs0TnpSaFptWXlOQzB3TURjMkxUUmlNVEV0WW1aaU5DMW1NV1kwTmpKaE5qaGpZelFHT2daRlZBPT0iLCJleHAiOm51bGwsInB1ciI6ImJsb2JfaWQifX0=--a5a6f2b66b9973bf8bc144b742b15b2786f1e073/picture.jpg relationships: primary_office_state: data: - id: c845efe7-a422-42fe-9b87-a3c4becd9c1d + id: 5c7eef99-dc52-430e-88f5-cb516f50a7d6 type: subgeographic primary_office_country: data: - id: f331c4f6-43ea-41fc-ae83-164b106c54eb + id: 77cd3cc1-71a2-4495-b656-ee75be5f6005 type: subgeographic subgeographics: data: - - id: 96fde5c4-5273-47a4-b770-664b671d9baf + - id: ecbc1244-c507-412e-9afc-dcd3f8f0ddd6 type: subgeographic subgeographic_ancestors: data: - - id: 96fde5c4-5273-47a4-b770-664b671d9baf + - id: ecbc1244-c507-412e-9afc-dcd3f8f0ddd6 type: subgeographic - - id: ee599639-907e-4307-b935-dc17c60393ce + - id: 2df1e53e-f14b-48f2-8bca-f759ba6d01f0 type: subgeographic projects: data: [] @@ -1201,6 +1201,150 @@ paths: type: array items: "$ref": "#/components/schemas/enum" + "/api/v1/members/{id}": + put: + summary: Updates a member + tags: + - Member + security: + - Bearer: {} + parameters: + - name: id + in: path + required: true + schema: + type: string + responses: + '403': + description: Forbidden + content: + application/json: + example: + errors: + - title: You are not authorized to access this page. + schema: + "$ref": "#/components/schemas/errors" + '200': + description: success + content: + application/json: + example: + data: + id: 4e61eee2-fa1f-4d35-ad6f-d7c4b506502e + type: member + attributes: + id: 4e61eee2-fa1f-4d35-ad6f-d7c4b506502e + email: new@email.test + first_name: New + last_name: Name + created_at: '2024-12-25T15:42:24.087Z' + updated_at: '2024-12-25T15:42:24.090Z' + schema: + type: object + properties: + data: + "$ref": "#/components/schemas/member" + '422': + description: Invalid attributes + content: + application/json: + schema: + "$ref": "#/components/schemas/errors" + requestBody: + content: + application/json: + schema: + type: object + properties: + first_name: + type: string + nullable: true + last_name: + type: string + nullable: true + email: + type: string + nullable: true + password: + type: string + nullable: true + password_confirmation: + type: string + nullable: true + "/api/v1/members/me": + get: + summary: Returns current member + tags: + - Member + security: + - Bearer: {} + responses: + '403': + description: Forbidden + content: + application/json: + example: + errors: + - title: You are not authorized to access this page. + schema: + "$ref": "#/components/schemas/errors" + '200': + description: success + content: + application/json: + example: + data: + id: 8aa8ed72-daab-41ce-a283-89ab44b935fb + type: member + attributes: + id: 8aa8ed72-daab-41ce-a283-89ab44b935fb + email: admin1@example.com + first_name: Dawna + last_name: Block + created_at: '2024-12-25T15:42:24.182Z' + updated_at: '2024-12-25T15:42:24.182Z' + schema: + type: object + properties: + data: + "$ref": "#/components/schemas/member" + "/api/v1/members/sign_in": + post: + summary: Returns member access token + tags: + - Member + parameters: [] + responses: + '200': + description: success + content: + application/json: + example: + token: eyJhbGciOiJIUzI1NiJ9.eyJtZW1iZXJfaWQiOiIyOGU0NThhOC00NGJlLTQ2MjYtYjlhNS0xOThhMTU4YjVhNDYiLCJmaXJzdF9uYW1lIjoiRGF3bmEiLCJsYXN0X25hbWUiOiJCbG9jayIsImVtYWlsIjoiYWRtaW4xQGV4YW1wbGUuY29tIiwiZXhwIjoxNzM1NzQ2MTQ0fQ.tezygzFz6ilYdmB5oJe5Gd4j_Ohrh6Y7QZibMTgNxM4 + schema: + type: object + properties: + token: + type: string + '422': + description: Invalid credentials + content: + application/json: + schema: + "$ref": "#/components/schemas/errors" + requestBody: + content: + application/json: + schema: + type: object + properties: + email: + type: string + password: + type: string + required: + - email + - password "/api/v1/projects": get: summary: Returns list of the projects @@ -1382,7 +1526,7 @@ paths: application/json: example: data: - - id: 5b19b2aa-cc1c-4f9f-8ed5-b7601da5625a + - id: 752d0d44-9cd7-438c-b7bd-1cff3c51a5cb type: project attributes: name: Msgr. Genaro Cronin @@ -1413,35 +1557,35 @@ paths: Et quaerat omnis veniam. recipient_legal_status: government_organization logo: - small: http://localhost:4000/rails/active_storage/representations/redirect/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaEpJaWsxWXpRNU5EWTBNeTAwWkRRNUxUUmtNVGd0T0dRd05DMHhPVEJtTm1VNU1URXdaamNHT2daRlZBPT0iLCJleHAiOm51bGwsInB1ciI6ImJsb2JfaWQifX0=--8d2ce3fcdb1edfadebd089fd64fe8205804c0349/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaDdCem9MWm05eWJXRjBTU0lJYW5CbkJqb0dSVlE2QzNKbGMybDZaVWtpRERJd01IZ3lNREFHT3daVSIsImV4cCI6bnVsbCwicHVyIjoidmFyaWF0aW9uIn19--8673702c2d856505736727890dcac6a632977811/picture.jpg - medium: http://localhost:4000/rails/active_storage/representations/redirect/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaEpJaWsxWXpRNU5EWTBNeTAwWkRRNUxUUmtNVGd0T0dRd05DMHhPVEJtTm1VNU1URXdaamNHT2daRlZBPT0iLCJleHAiOm51bGwsInB1ciI6ImJsb2JfaWQifX0=--8d2ce3fcdb1edfadebd089fd64fe8205804c0349/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaDdCem9MWm05eWJXRjBTU0lJYW5CbkJqb0dSVlE2QzNKbGMybDZaVWtpRERnd01IZzRNREFHT3daVSIsImV4cCI6bnVsbCwicHVyIjoidmFyaWF0aW9uIn19--e82a96c0eabd93d914de4ef37febd98c36e0e275/picture.jpg - original: http://localhost:4000/rails/active_storage/blobs/redirect/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaEpJaWsxWXpRNU5EWTBNeTAwWkRRNUxUUmtNVGd0T0dRd05DMHhPVEJtTm1VNU1URXdaamNHT2daRlZBPT0iLCJleHAiOm51bGwsInB1ciI6ImJsb2JfaWQifX0=--8d2ce3fcdb1edfadebd089fd64fe8205804c0349/picture.jpg + small: http://localhost:4000/rails/active_storage/representations/redirect/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaEpJaWs1T0RabU9UaGxNaTB4TWpCa0xUUXlaRGN0T0RnelpDMHlPRFZsWTJFellUaGhPVEVHT2daRlZBPT0iLCJleHAiOm51bGwsInB1ciI6ImJsb2JfaWQifX0=--f214ac4ae870933f6238c2ede062579d5cf49a1e/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaDdCem9MWm05eWJXRjBTU0lJYW5CbkJqb0dSVlE2QzNKbGMybDZaVWtpRERJd01IZ3lNREFHT3daVSIsImV4cCI6bnVsbCwicHVyIjoidmFyaWF0aW9uIn19--8673702c2d856505736727890dcac6a632977811/picture.jpg + medium: http://localhost:4000/rails/active_storage/representations/redirect/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaEpJaWs1T0RabU9UaGxNaTB4TWpCa0xUUXlaRGN0T0RnelpDMHlPRFZsWTJFellUaGhPVEVHT2daRlZBPT0iLCJleHAiOm51bGwsInB1ciI6ImJsb2JfaWQifX0=--f214ac4ae870933f6238c2ede062579d5cf49a1e/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaDdCem9MWm05eWJXRjBTU0lJYW5CbkJqb0dSVlE2QzNKbGMybDZaVWtpRERnd01IZzRNREFHT3daVSIsImV4cCI6bnVsbCwicHVyIjoidmFyaWF0aW9uIn19--e82a96c0eabd93d914de4ef37febd98c36e0e275/picture.jpg + original: http://localhost:4000/rails/active_storage/blobs/redirect/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaEpJaWs1T0RabU9UaGxNaTB4TWpCa0xUUXlaRGN0T0RnelpDMHlPRFZsWTJFellUaGhPVEVHT2daRlZBPT0iLCJleHAiOm51bGwsInB1ciI6ImJsb2JfaWQifX0=--f214ac4ae870933f6238c2ede062579d5cf49a1e/picture.jpg relationships: state: data: - id: e941b826-be78-4129-b0f7-6164cee7d956 + id: 5abe98be-434f-431b-873e-cd5abdaf21e6 type: subgeographic country: data: - id: 9189167d-ca1e-4b2e-abdf-b394dc50e205 + id: 42248f80-e08f-41d7-a45c-198da0777da9 type: subgeographic subgeographics: data: - - id: a98c84a6-c6df-4670-9043-48472ae6ae8a + - id: 011da5e9-cebb-492a-b8ee-507fa234c86e type: subgeographic subgeographic_ancestors: data: - - id: a98c84a6-c6df-4670-9043-48472ae6ae8a + - id: 011da5e9-cebb-492a-b8ee-507fa234c86e type: subgeographic - - id: d17f3c7c-9d7c-4a0c-9511-fbf9edcd603f + - id: 574a74ae-9a09-408c-9f68-2b1614ea4c5a type: subgeographic funders: data: - - id: fd9df449-a2a7-4ba4-af5f-f8426d326a32 + - id: 72bcad50-0a36-472d-898b-ad42d7c572c7 type: funder - - id: b9b863e0-9c24-4ca2-80ef-d46b5e803714 + - id: 149efa4c-eb48-40f2-8ece-394e4f0b3585 type: funder - - id: bfff1121-cdc9-4575-9d54-ef3468ab337a + - id: b14cc463-ea2e-417f-8c56-67428a0c5a4c type: project attributes: name: Otha Kemmer @@ -1463,17 +1607,17 @@ paths: capital_type_other: Placeat commodi libero et. recipient_legal_status: for_profit logo: - small: http://localhost:4000/rails/active_storage/representations/redirect/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaEpJaWt6TlRFNVl6RTFOeTB4TkRreUxUUXhNV0l0WVdNelpTMWlabVU0Wm1NMU1ESmxNek1HT2daRlZBPT0iLCJleHAiOm51bGwsInB1ciI6ImJsb2JfaWQifX0=--af8634ccc41e9cafaa387d3c9fcc9edc8296d4df/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaDdCem9MWm05eWJXRjBTU0lJYW5CbkJqb0dSVlE2QzNKbGMybDZaVWtpRERJd01IZ3lNREFHT3daVSIsImV4cCI6bnVsbCwicHVyIjoidmFyaWF0aW9uIn19--8673702c2d856505736727890dcac6a632977811/picture.jpg - medium: http://localhost:4000/rails/active_storage/representations/redirect/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaEpJaWt6TlRFNVl6RTFOeTB4TkRreUxUUXhNV0l0WVdNelpTMWlabVU0Wm1NMU1ESmxNek1HT2daRlZBPT0iLCJleHAiOm51bGwsInB1ciI6ImJsb2JfaWQifX0=--af8634ccc41e9cafaa387d3c9fcc9edc8296d4df/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaDdCem9MWm05eWJXRjBTU0lJYW5CbkJqb0dSVlE2QzNKbGMybDZaVWtpRERnd01IZzRNREFHT3daVSIsImV4cCI6bnVsbCwicHVyIjoidmFyaWF0aW9uIn19--e82a96c0eabd93d914de4ef37febd98c36e0e275/picture.jpg - original: http://localhost:4000/rails/active_storage/blobs/redirect/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaEpJaWt6TlRFNVl6RTFOeTB4TkRreUxUUXhNV0l0WVdNelpTMWlabVU0Wm1NMU1ESmxNek1HT2daRlZBPT0iLCJleHAiOm51bGwsInB1ciI6ImJsb2JfaWQifX0=--af8634ccc41e9cafaa387d3c9fcc9edc8296d4df/picture.jpg + small: http://localhost:4000/rails/active_storage/representations/redirect/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaEpJaWs0TkRjM1lXUXpOeTFrT1dNNExUUTNZMlV0T0dVeU5DMWlORFZqTjJFd1lUTTJaV0lHT2daRlZBPT0iLCJleHAiOm51bGwsInB1ciI6ImJsb2JfaWQifX0=--57165b55d25fe7223b7c0cf907d5f24a1f4a567b/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaDdCem9MWm05eWJXRjBTU0lJYW5CbkJqb0dSVlE2QzNKbGMybDZaVWtpRERJd01IZ3lNREFHT3daVSIsImV4cCI6bnVsbCwicHVyIjoidmFyaWF0aW9uIn19--8673702c2d856505736727890dcac6a632977811/picture.jpg + medium: http://localhost:4000/rails/active_storage/representations/redirect/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaEpJaWs0TkRjM1lXUXpOeTFrT1dNNExUUTNZMlV0T0dVeU5DMWlORFZqTjJFd1lUTTJaV0lHT2daRlZBPT0iLCJleHAiOm51bGwsInB1ciI6ImJsb2JfaWQifX0=--57165b55d25fe7223b7c0cf907d5f24a1f4a567b/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaDdCem9MWm05eWJXRjBTU0lJYW5CbkJqb0dSVlE2QzNKbGMybDZaVWtpRERnd01IZzRNREFHT3daVSIsImV4cCI6bnVsbCwicHVyIjoidmFyaWF0aW9uIn19--e82a96c0eabd93d914de4ef37febd98c36e0e275/picture.jpg + original: http://localhost:4000/rails/active_storage/blobs/redirect/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaEpJaWs0TkRjM1lXUXpOeTFrT1dNNExUUTNZMlV0T0dVeU5DMWlORFZqTjJFd1lUTTJaV0lHT2daRlZBPT0iLCJleHAiOm51bGwsInB1ciI6ImJsb2JfaWQifX0=--57165b55d25fe7223b7c0cf907d5f24a1f4a567b/picture.jpg relationships: state: data: - id: a6904256-1e0c-4d3d-8f74-b3e000a64012 + id: ed7529a0-c635-46b1-b6ea-aed6648aad5e type: subgeographic country: data: - id: 18a658c2-dfc6-4d95-85ea-ce315f0f1d56 + id: 5d3cdd83-8d7e-4413-b91d-244d848e2c9a type: subgeographic subgeographics: data: [] @@ -1481,9 +1625,9 @@ paths: data: [] funders: data: - - id: c823a670-6e68-406f-a435-6a871a3b697b + - id: 2523757d-259d-45b4-94df-d7a1ac997785 type: funder - - id: 84b223d3-cdac-4222-b7df-51219200cea1 + - id: aaca5af3-eef5-47d2-bc89-f57fc99648d9 type: project attributes: name: Otha Kemmer @@ -1501,17 +1645,17 @@ paths: capital_type_other: '' recipient_legal_status: for_profit logo: - small: http://localhost:4000/rails/active_storage/representations/redirect/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaEpJaWt6TlRFNVl6RTFOeTB4TkRreUxUUXhNV0l0WVdNelpTMWlabVU0Wm1NMU1ESmxNek1HT2daRlZBPT0iLCJleHAiOm51bGwsInB1ciI6ImJsb2JfaWQifX0=--af8634ccc41e9cafaa387d3c9fcc9edc8296d4df/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaDdCem9MWm05eWJXRjBTU0lJYW5CbkJqb0dSVlE2QzNKbGMybDZaVWtpRERJd01IZ3lNREFHT3daVSIsImV4cCI6bnVsbCwicHVyIjoidmFyaWF0aW9uIn19--8673702c2d856505736727890dcac6a632977811/picture.jpg - medium: http://localhost:4000/rails/active_storage/representations/redirect/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaEpJaWt6TlRFNVl6RTFOeTB4TkRreUxUUXhNV0l0WVdNelpTMWlabVU0Wm1NMU1ESmxNek1HT2daRlZBPT0iLCJleHAiOm51bGwsInB1ciI6ImJsb2JfaWQifX0=--af8634ccc41e9cafaa387d3c9fcc9edc8296d4df/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaDdCem9MWm05eWJXRjBTU0lJYW5CbkJqb0dSVlE2QzNKbGMybDZaVWtpRERnd01IZzRNREFHT3daVSIsImV4cCI6bnVsbCwicHVyIjoidmFyaWF0aW9uIn19--e82a96c0eabd93d914de4ef37febd98c36e0e275/picture.jpg - original: http://localhost:4000/rails/active_storage/blobs/redirect/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaEpJaWt6TlRFNVl6RTFOeTB4TkRreUxUUXhNV0l0WVdNelpTMWlabVU0Wm1NMU1ESmxNek1HT2daRlZBPT0iLCJleHAiOm51bGwsInB1ciI6ImJsb2JfaWQifX0=--af8634ccc41e9cafaa387d3c9fcc9edc8296d4df/picture.jpg + small: http://localhost:4000/rails/active_storage/representations/redirect/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaEpJaWs0TkRjM1lXUXpOeTFrT1dNNExUUTNZMlV0T0dVeU5DMWlORFZqTjJFd1lUTTJaV0lHT2daRlZBPT0iLCJleHAiOm51bGwsInB1ciI6ImJsb2JfaWQifX0=--57165b55d25fe7223b7c0cf907d5f24a1f4a567b/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaDdCem9MWm05eWJXRjBTU0lJYW5CbkJqb0dSVlE2QzNKbGMybDZaVWtpRERJd01IZ3lNREFHT3daVSIsImV4cCI6bnVsbCwicHVyIjoidmFyaWF0aW9uIn19--8673702c2d856505736727890dcac6a632977811/picture.jpg + medium: http://localhost:4000/rails/active_storage/representations/redirect/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaEpJaWs0TkRjM1lXUXpOeTFrT1dNNExUUTNZMlV0T0dVeU5DMWlORFZqTjJFd1lUTTJaV0lHT2daRlZBPT0iLCJleHAiOm51bGwsInB1ciI6ImJsb2JfaWQifX0=--57165b55d25fe7223b7c0cf907d5f24a1f4a567b/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaDdCem9MWm05eWJXRjBTU0lJYW5CbkJqb0dSVlE2QzNKbGMybDZaVWtpRERnd01IZzRNREFHT3daVSIsImV4cCI6bnVsbCwicHVyIjoidmFyaWF0aW9uIn19--e82a96c0eabd93d914de4ef37febd98c36e0e275/picture.jpg + original: http://localhost:4000/rails/active_storage/blobs/redirect/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaEpJaWs0TkRjM1lXUXpOeTFrT1dNNExUUTNZMlV0T0dVeU5DMWlORFZqTjJFd1lUTTJaV0lHT2daRlZBPT0iLCJleHAiOm51bGwsInB1ciI6ImJsb2JfaWQifX0=--57165b55d25fe7223b7c0cf907d5f24a1f4a567b/picture.jpg relationships: state: data: - id: a6904256-1e0c-4d3d-8f74-b3e000a64012 + id: ed7529a0-c635-46b1-b6ea-aed6648aad5e type: subgeographic country: data: - id: 18a658c2-dfc6-4d95-85ea-ce315f0f1d56 + id: 5d3cdd83-8d7e-4413-b91d-244d848e2c9a type: subgeographic subgeographics: data: [] @@ -1519,7 +1663,7 @@ paths: data: [] funders: data: [] - - id: 95eb204e-806a-4ad8-b461-a9b45a72cf93 + - id: 98ee8441-ef04-4270-807a-466438e49002 type: project attributes: name: Otha Kemmer @@ -1537,17 +1681,17 @@ paths: capital_type_other: '' recipient_legal_status: for_profit logo: - small: http://localhost:4000/rails/active_storage/representations/redirect/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaEpJaWt6TlRFNVl6RTFOeTB4TkRreUxUUXhNV0l0WVdNelpTMWlabVU0Wm1NMU1ESmxNek1HT2daRlZBPT0iLCJleHAiOm51bGwsInB1ciI6ImJsb2JfaWQifX0=--af8634ccc41e9cafaa387d3c9fcc9edc8296d4df/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaDdCem9MWm05eWJXRjBTU0lJYW5CbkJqb0dSVlE2QzNKbGMybDZaVWtpRERJd01IZ3lNREFHT3daVSIsImV4cCI6bnVsbCwicHVyIjoidmFyaWF0aW9uIn19--8673702c2d856505736727890dcac6a632977811/picture.jpg - medium: http://localhost:4000/rails/active_storage/representations/redirect/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaEpJaWt6TlRFNVl6RTFOeTB4TkRreUxUUXhNV0l0WVdNelpTMWlabVU0Wm1NMU1ESmxNek1HT2daRlZBPT0iLCJleHAiOm51bGwsInB1ciI6ImJsb2JfaWQifX0=--af8634ccc41e9cafaa387d3c9fcc9edc8296d4df/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaDdCem9MWm05eWJXRjBTU0lJYW5CbkJqb0dSVlE2QzNKbGMybDZaVWtpRERnd01IZzRNREFHT3daVSIsImV4cCI6bnVsbCwicHVyIjoidmFyaWF0aW9uIn19--e82a96c0eabd93d914de4ef37febd98c36e0e275/picture.jpg - original: http://localhost:4000/rails/active_storage/blobs/redirect/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaEpJaWt6TlRFNVl6RTFOeTB4TkRreUxUUXhNV0l0WVdNelpTMWlabVU0Wm1NMU1ESmxNek1HT2daRlZBPT0iLCJleHAiOm51bGwsInB1ciI6ImJsb2JfaWQifX0=--af8634ccc41e9cafaa387d3c9fcc9edc8296d4df/picture.jpg + small: http://localhost:4000/rails/active_storage/representations/redirect/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaEpJaWs0TkRjM1lXUXpOeTFrT1dNNExUUTNZMlV0T0dVeU5DMWlORFZqTjJFd1lUTTJaV0lHT2daRlZBPT0iLCJleHAiOm51bGwsInB1ciI6ImJsb2JfaWQifX0=--57165b55d25fe7223b7c0cf907d5f24a1f4a567b/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaDdCem9MWm05eWJXRjBTU0lJYW5CbkJqb0dSVlE2QzNKbGMybDZaVWtpRERJd01IZ3lNREFHT3daVSIsImV4cCI6bnVsbCwicHVyIjoidmFyaWF0aW9uIn19--8673702c2d856505736727890dcac6a632977811/picture.jpg + medium: http://localhost:4000/rails/active_storage/representations/redirect/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaEpJaWs0TkRjM1lXUXpOeTFrT1dNNExUUTNZMlV0T0dVeU5DMWlORFZqTjJFd1lUTTJaV0lHT2daRlZBPT0iLCJleHAiOm51bGwsInB1ciI6ImJsb2JfaWQifX0=--57165b55d25fe7223b7c0cf907d5f24a1f4a567b/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaDdCem9MWm05eWJXRjBTU0lJYW5CbkJqb0dSVlE2QzNKbGMybDZaVWtpRERnd01IZzRNREFHT3daVSIsImV4cCI6bnVsbCwicHVyIjoidmFyaWF0aW9uIn19--e82a96c0eabd93d914de4ef37febd98c36e0e275/picture.jpg + original: http://localhost:4000/rails/active_storage/blobs/redirect/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaEpJaWs0TkRjM1lXUXpOeTFrT1dNNExUUTNZMlV0T0dVeU5DMWlORFZqTjJFd1lUTTJaV0lHT2daRlZBPT0iLCJleHAiOm51bGwsInB1ciI6ImJsb2JfaWQifX0=--57165b55d25fe7223b7c0cf907d5f24a1f4a567b/picture.jpg relationships: state: data: - id: a6904256-1e0c-4d3d-8f74-b3e000a64012 + id: ed7529a0-c635-46b1-b6ea-aed6648aad5e type: subgeographic country: data: - id: 18a658c2-dfc6-4d95-85ea-ce315f0f1d56 + id: 5d3cdd83-8d7e-4413-b91d-244d848e2c9a type: subgeographic subgeographics: data: [] @@ -1619,7 +1763,7 @@ paths: application/json: example: data: - id: 4170c70b-cfc3-4ec8-9b58-355def90213b + id: 81943c0d-44fe-4dec-bdf7-4ad225db986d type: project attributes: name: Msgr. Genaro Cronin @@ -1642,31 +1786,31 @@ paths: capital_type_other: Enim repellat pariatur est. recipient_legal_status: for_profit logo: - small: http://localhost:4000/rails/active_storage/representations/redirect/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaEpJaWt3WW1Jd1pqTmlPQzAwWW1abUxUUmhOakV0WW1JNVlpMWtaR1JsTm1KaU1EazNaallHT2daRlZBPT0iLCJleHAiOm51bGwsInB1ciI6ImJsb2JfaWQifX0=--75fef045d98e6399872b687222bd421b4fc499a4/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaDdCem9MWm05eWJXRjBTU0lJYW5CbkJqb0dSVlE2QzNKbGMybDZaVWtpRERJd01IZ3lNREFHT3daVSIsImV4cCI6bnVsbCwicHVyIjoidmFyaWF0aW9uIn19--8673702c2d856505736727890dcac6a632977811/picture.jpg - medium: http://localhost:4000/rails/active_storage/representations/redirect/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaEpJaWt3WW1Jd1pqTmlPQzAwWW1abUxUUmhOakV0WW1JNVlpMWtaR1JsTm1KaU1EazNaallHT2daRlZBPT0iLCJleHAiOm51bGwsInB1ciI6ImJsb2JfaWQifX0=--75fef045d98e6399872b687222bd421b4fc499a4/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaDdCem9MWm05eWJXRjBTU0lJYW5CbkJqb0dSVlE2QzNKbGMybDZaVWtpRERnd01IZzRNREFHT3daVSIsImV4cCI6bnVsbCwicHVyIjoidmFyaWF0aW9uIn19--e82a96c0eabd93d914de4ef37febd98c36e0e275/picture.jpg - original: http://localhost:4000/rails/active_storage/blobs/redirect/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaEpJaWt3WW1Jd1pqTmlPQzAwWW1abUxUUmhOakV0WW1JNVlpMWtaR1JsTm1KaU1EazNaallHT2daRlZBPT0iLCJleHAiOm51bGwsInB1ciI6ImJsb2JfaWQifX0=--75fef045d98e6399872b687222bd421b4fc499a4/picture.jpg + small: http://localhost:4000/rails/active_storage/representations/redirect/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaEpJaWxqTnpFME5qSm1OQzB3WmpFMExUUTROVEV0WW1JME1TMWlNMlU0Tm1Oa1pHVmtPRFVHT2daRlZBPT0iLCJleHAiOm51bGwsInB1ciI6ImJsb2JfaWQifX0=--e48899ad2f506756d8be7dbc0224865422cad46f/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaDdCem9MWm05eWJXRjBTU0lJYW5CbkJqb0dSVlE2QzNKbGMybDZaVWtpRERJd01IZ3lNREFHT3daVSIsImV4cCI6bnVsbCwicHVyIjoidmFyaWF0aW9uIn19--8673702c2d856505736727890dcac6a632977811/picture.jpg + medium: http://localhost:4000/rails/active_storage/representations/redirect/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaEpJaWxqTnpFME5qSm1OQzB3WmpFMExUUTROVEV0WW1JME1TMWlNMlU0Tm1Oa1pHVmtPRFVHT2daRlZBPT0iLCJleHAiOm51bGwsInB1ciI6ImJsb2JfaWQifX0=--e48899ad2f506756d8be7dbc0224865422cad46f/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaDdCem9MWm05eWJXRjBTU0lJYW5CbkJqb0dSVlE2QzNKbGMybDZaVWtpRERnd01IZzRNREFHT3daVSIsImV4cCI6bnVsbCwicHVyIjoidmFyaWF0aW9uIn19--e82a96c0eabd93d914de4ef37febd98c36e0e275/picture.jpg + original: http://localhost:4000/rails/active_storage/blobs/redirect/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaEpJaWxqTnpFME5qSm1OQzB3WmpFMExUUTROVEV0WW1JME1TMWlNMlU0Tm1Oa1pHVmtPRFVHT2daRlZBPT0iLCJleHAiOm51bGwsInB1ciI6ImJsb2JfaWQifX0=--e48899ad2f506756d8be7dbc0224865422cad46f/picture.jpg relationships: state: data: - id: 2a9656e7-04a2-4b70-8ed9-cd132481ec5e + id: 653cecf5-f877-4572-9a8e-40152ca19e6d type: subgeographic country: data: - id: c319e4ec-fe5f-4568-a409-b565ec56ee71 + id: 48535eef-5025-471e-b9ba-263821e389ff type: subgeographic subgeographics: data: - - id: 96202085-4e92-447d-b711-802726d22716 + - id: 54962130-d04b-4fbb-915d-05c42988e6a9 type: subgeographic subgeographic_ancestors: data: - - id: 96202085-4e92-447d-b711-802726d22716 + - id: 54962130-d04b-4fbb-915d-05c42988e6a9 type: subgeographic - - id: 3afa18be-a30a-4fe5-bd13-f0669fb8a02e + - id: f7cc62da-4a42-4e82-bccc-52b3f089f0f0 type: subgeographic funders: data: - - id: ee083e13-ed1d-4435-9066-e027b5b5f844 + - id: 164120be-76cb-42c3-9c24-e3cf4b633197 type: funder schema: type: object @@ -1812,7 +1956,7 @@ paths: content: application/json: example: - token: eyJhbGciOiJIUzI1NiJ9.eyJtZW1iZXJfaWQiOiJmNzAxMGEwNS0xYWI5LTRkMjEtYmNhZS1iMDJmNDIxNzk1ZTIiLCJleHAiOjE3MzQ3OTU0NDB9.MO-E9JnsHW7rmH7L0Kp1PaYZ7qEoi5IqthFbIIlnp2Y + token: eyJhbGciOiJIUzI1NiJ9.eyJtZW1iZXJfaWQiOiIxNmNjMTM1ZS03NGNiLTRjNmQtYjYzMS1jNmE3MWQxNmU2NDYiLCJmaXJzdF9uYW1lIjoiRGF3bmEiLCJsYXN0X25hbWUiOiJCbG9jayIsImVtYWlsIjoibWVtYmVyQGV4YW1wbGUuY29tIiwiZXhwIjoxNzM1NzQ2MTQ2fQ.-S2HNIRtgB1dB7JNu8hqVwr__2kxgzFAQn6QbyIXvPk schema: type: object properties: @@ -1879,35 +2023,35 @@ paths: application/json: example: data: - - id: 1b13c945-2250-4a01-8ab9-f38ec2c08237 + - id: b3e4f844-c17b-4217-931a-8d166eab67c1 type: subgeographic attributes: name: Canada code: BWA geographic: countries abbreviation: C-BWA - created_at: '2024-12-14T15:37:21.012Z' - updated_at: '2024-12-14T15:37:21.012Z' + created_at: '2024-12-25T15:42:27.150Z' + updated_at: '2024-12-25T15:42:27.150Z' relationships: parent: data: subgeographics: data: - - id: ca9a8c1e-a346-49d3-8f6d-3cda3a904f46 + - id: b7afdf47-690d-46bf-b1b6-53ce0b3d54ad type: subgeographic - - id: ca9a8c1e-a346-49d3-8f6d-3cda3a904f46 + - id: b7afdf47-690d-46bf-b1b6-53ce0b3d54ad type: subgeographic attributes: name: Papua New Guinea code: NPL geographic: regions abbreviation: R-NPL - created_at: '2024-12-14T15:37:21.016Z' - updated_at: '2024-12-14T15:37:21.016Z' + created_at: '2024-12-25T15:42:27.153Z' + updated_at: '2024-12-25T15:42:27.153Z' relationships: parent: data: - id: 1b13c945-2250-4a01-8ab9-f38ec2c08237 + id: b3e4f844-c17b-4217-931a-8d166eab67c1 type: subgeographic subgeographics: data: [] @@ -1953,11 +2097,11 @@ paths: - - 0 - 0 properties: - id: a721ad53-8aca-4687-943d-cc1342cdcc4f + id: 28c74876-31b7-4e37-9274-d460da546ae0 code: NPL name: Papua New Guinea abbreviation: R-NPL - parent_id: a2a60618-438e-40ee-9e8b-9d0ceae97e55 + parent_id: 450d018f-3646-4f77-90e4-e91f0b4d35d0 - type: Feature geometry: type: Polygon @@ -1973,11 +2117,11 @@ paths: - - 0 - 0 properties: - id: af95ab89-6980-4b57-8911-da706e15135b + id: ea29e7c4-7f84-4382-900a-3e0a061c88c4 code: IRL name: Jamaica abbreviation: R-IRL - parent_id: a2a60618-438e-40ee-9e8b-9d0ceae97e55 + parent_id: 450d018f-3646-4f77-90e4-e91f0b4d35d0 schema: "$ref": "#/components/schemas/subgeographic_geojson" '422': @@ -1989,43 +2133,6 @@ paths: - title: Parameter filter[geographic] is mandatory! schema: "$ref": "#/components/schemas/errors" - "/api/v1/token": - post: - summary: Returns member access token - tags: - - Token - parameters: [] - responses: - '200': - description: success - content: - application/json: - example: - token: eyJhbGciOiJIUzI1NiJ9.eyJtZW1iZXJfaWQiOiIwODRiMDg4Mi03YzcwLTQ2YTEtYTVjMC0wYzk2ZDJjZmM0M2EiLCJleHAiOjE3MzQ3OTU0NDF9.dCOPIrTbhi851u97T9-VBlc2lWEihbloZwbdpDKuMJA - schema: - type: object - properties: - token: - type: string - '422': - description: Invalid credentials - content: - application/json: - schema: - "$ref": "#/components/schemas/errors" - requestBody: - content: - application/json: - schema: - type: object - properties: - email: - type: string - password: - type: string - required: - - email - - password "/api/v1/widget_slugs": get: summary: Returns list of the widget_slugs @@ -2191,7 +2298,7 @@ paths: application/json: example: data: - - id: fdfc9784-1a68-44a7-a03e-f7f41d6aa47d + - id: b9eadc6f-b87c-46fe-82a7-866126aa214e type: widget attributes: title: Enim repellat pariatur est. @@ -2203,9 +2310,9 @@ paths: position: 38 description: Enim repellat pariatur. Earum modi eos. Libero tempora exercitationem. Qui dolorem quo. - created_at: '2024-12-14T15:37:21.331Z' - updated_at: '2024-12-14T15:37:21.331Z' - - id: eb488f25-c38a-4ea8-9ace-7e18c804087a + created_at: '2024-12-25T15:42:27.364Z' + updated_at: '2024-12-25T15:42:27.364Z' + - id: 2e19b121-c5fc-48e9-9801-28b34cd7b075 type: widget attributes: title: Placeat commodi libero et. @@ -2217,8 +2324,8 @@ paths: position: 41 description: Placeat commodi libero. Quo recusandae repellat. Sunt commodi tempore. Voluptatem et corrupti. - created_at: '2024-12-14T15:37:21.333Z' - updated_at: '2024-12-14T15:37:21.333Z' + created_at: '2024-12-25T15:42:27.365Z' + updated_at: '2024-12-25T15:42:27.365Z' schema: type: object properties: @@ -2362,7 +2469,7 @@ paths: application/json: example: data: - id: fa32c171-223a-47c0-abc2-00ef7a168a96 + id: b721fe7e-8839-43a4-bf5c-ba1d234fe206 type: widget_data attributes: title: Enim repellat pariatur est. @@ -2523,7 +2630,12 @@ paths: schema: "$ref": "#/components/schemas/errors" components: - securitySchemes: {} + securitySchemes: + Bearer: + type: apiKey + name: Authorization + in: header + description: Your JWT token schemas: funder: type: object @@ -2873,6 +2985,32 @@ components: - type - attributes - relationships + member: + type: object + properties: + id: + type: string + type: + type: string + attributes: + type: object + properties: + id: + type: string + first_name: + type: string + last_name: + type: string + email: + type: string + created_at: + type: string + updated_at: + type: string + required: + - id + - type + - attributes widget: type: object properties: