add active and inactive review request for user query

This commit is contained in:
2022-10-18 22:17:06 -03:00
parent b9d682f86b
commit afb827dae3
6 changed files with 151 additions and 2 deletions

View File

@@ -9,5 +9,16 @@ module Types
field :email, String, null: false field :email, String, null: false
field :roles, [Enums::RoleEnum], null: false field :roles, [Enums::RoleEnum], null: false
field :avatar_url, String, null: true field :avatar_url, String, null: true
field :inactive_review_requests, Types::ReviewRequestType.connection_type, null: false
field :active_review_requests, Types::ReviewRequestType.connection_type, null: false
def inactive_review_requests
object.review_requests.inactive
end
def active_review_requests
object.review_requests.active
end
end end
end end

View File

@@ -402,6 +402,35 @@ export type ReviewMessageInput = {
text: Scalars['String']; text: Scalars['String'];
}; };
export type ReviewRequest = {
__typename?: 'ReviewRequest';
answered: Scalars['Boolean'];
id: Scalars['ID'];
question: Question;
user: User;
};
/** The connection type for ReviewRequest. */
export type ReviewRequestConnection = {
__typename?: 'ReviewRequestConnection';
/** A list of edges. */
edges: Array<ReviewRequestEdge>;
/** A list of nodes. */
nodes: Array<ReviewRequest>;
/** Information to aid in pagination. */
pageInfo: PageInfo;
totalCount: Scalars['Int'];
};
/** An edge in a connection. */
export type ReviewRequestEdge = {
__typename?: 'ReviewRequestEdge';
/** A cursor for use in pagination. */
cursor: Scalars['String'];
/** The item at the end of the edge. */
node?: Maybe<ReviewRequest>;
};
export type Subject = { export type Subject = {
__typename?: 'Subject'; __typename?: 'Subject';
axis: Axis; axis: Axis;
@@ -460,13 +489,31 @@ export type UpdateQuestionPayload = {
export type User = { export type User = {
__typename?: 'User'; __typename?: 'User';
activeReviewRequests: ReviewRequestConnection;
avatarUrl?: Maybe<Scalars['String']>; avatarUrl?: Maybe<Scalars['String']>;
email: Scalars['String']; email: Scalars['String'];
id: Scalars['ID']; id: Scalars['ID'];
inactiveReviewRequests: ReviewRequestConnection;
name: Scalars['String']; name: Scalars['String'];
roles: Array<UserRole>; roles: Array<UserRole>;
}; };
export type UserActiveReviewRequestsArgs = {
after?: InputMaybe<Scalars['String']>;
before?: InputMaybe<Scalars['String']>;
first?: InputMaybe<Scalars['Int']>;
last?: InputMaybe<Scalars['Int']>;
};
export type UserInactiveReviewRequestsArgs = {
after?: InputMaybe<Scalars['String']>;
before?: InputMaybe<Scalars['String']>;
first?: InputMaybe<Scalars['Int']>;
last?: InputMaybe<Scalars['Int']>;
};
/** The connection type for User. */ /** The connection type for User. */
export type UserConnection = { export type UserConnection = {
__typename?: 'UserConnection'; __typename?: 'UserConnection';

View File

@@ -526,6 +526,49 @@ input ReviewMessageInput {
text: String! text: String!
} }
type ReviewRequest {
answered: Boolean!
id: ID!
question: Question!
user: User!
}
"""
The connection type for ReviewRequest.
"""
type ReviewRequestConnection {
"""
A list of edges.
"""
edges: [ReviewRequestEdge!]!
"""
A list of nodes.
"""
nodes: [ReviewRequest!]!
"""
Information to aid in pagination.
"""
pageInfo: PageInfo!
totalCount: Int!
}
"""
An edge in a connection.
"""
type ReviewRequestEdge {
"""
A cursor for use in pagination.
"""
cursor: String!
"""
The item at the end of the edge.
"""
node: ReviewRequest
}
type Subject { type Subject {
axis: Axis! axis: Axis!
category: Category! category: Category!
@@ -619,9 +662,51 @@ type UpdateQuestionPayload {
} }
type User { type User {
activeReviewRequests(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
): ReviewRequestConnection!
avatarUrl: String avatarUrl: String
email: String! email: String!
id: ID! id: ID!
inactiveReviewRequests(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
): ReviewRequestConnection!
name: String! name: String!
roles: [UserRole!]! roles: [UserRole!]!
} }

View File

@@ -34,8 +34,9 @@ export const QuestionsWaitingReviewQuery: FC<Props> = ({ title }) => {
const [pageInfo, setPageInfo] = useState<PageInfo | undefined>() const [pageInfo, setPageInfo] = useState<PageInfo | undefined>()
const updateQuestions = (queryResult: Query) => { const updateQuestions = (queryResult: Query) => {
const { currentUser } = queryResult if (!queryResult.currentUser) return
const { activeReviewRequests } = currentUser as User
const { activeReviewRequests } = queryResult.currentUser
const reviewRequests = activeReviewRequests.nodes as ReviewRequest[] const reviewRequests = activeReviewRequests.nodes as ReviewRequest[]
setQuestions(reviewRequests.map(item => item.question)) setQuestions(reviewRequests.map(item => item.question))

View File

@@ -22,4 +22,7 @@
class ReviewRequest < ApplicationRecord class ReviewRequest < ApplicationRecord
belongs_to :question belongs_to :question
belongs_to :user belongs_to :user
scope :active, -> { where(answered: false) }
scope :inactive, -> { where(answered: true) }
end end

View File

@@ -24,6 +24,8 @@ class User < ApplicationRecord
include Trashable include Trashable
extend Enumerize extend Enumerize
has_many :review_requests, dependent: :destroy
devise :database_authenticatable, devise :database_authenticatable,
:recoverable, :recoverable,
:rememberable, :rememberable,