console/scripts/seed-schemas/federated/users.graphql
2025-11-21 12:08:56 -06:00

106 lines
2.4 KiB
GraphQL

extend schema
@link(url: "https://specs.apollo.dev/federation/v2.3", import: ["@key", "@tag", "@shareable"])
@link(url: "https://specs.graphql-hive.com/hive/v1.0", import: ["@meta"])
@meta(name: "owner", content: "users-team")
@meta(name: "contact", content: "#users-channel")
directive @tag(name: String!) repeatable on FIELD_DEFINITION | OBJECT
directive @meta(
name: String!
content: String!
) repeatable on SCHEMA | OBJECT | INTERFACE | FIELD_DEFINITION
"""
## User Account
Represents a **registered user** in the system. User data is subject to *strict privacy controls*.
### Key Features
- Unique identification via `id` and `username`
- Personal information (tagged as PII)
- Account creation tracking
> **Important**: Email and name fields contain Personally Identifiable Information (PII) and must be handled according to data privacy regulations.
**Authentication**: Users authenticate via email or username
**Federation**: Extended by other subgraphs for additional user data
"""
type User
@key(fields: "id")
@key(fields: "email")
@meta(name: "domain", content: "users")
@meta(name: "priority", content: "tier1") {
"""
Unique identifier for the user
"""
id: ID!
"""
User's email address (tagged as PII for data privacy compliance)
"""
email: String! @tag(name: "pii") @meta(name: "sensitivity", content: "pii")
"""
User's full name
"""
name: String @meta(name: "sensitivity", content: "pii")
"""
User's display alias or username
"""
alias: String
"""
Total number of products created by this user
"""
totalProductsCreated: Int @shareable
"""
Timestamp when the user account was created
"""
createdAt: DateTime
}
"""
ISO-8601 formatted date and time string
"""
scalar DateTime
"""
Input for creating a new user account
"""
input CreateUserInput {
"""
User's email address (required)
"""
email: String!
"""
User's full name (required)
"""
name: String!
"""
Optional display alias or username
"""
alias: String
}
"""
Input for updating an existing user account
"""
input UpdateUserInput {
"""
Updated full name
"""
name: String
"""
Updated display alias or username
"""
alias: String
}
extend type Query {
me: User
user(id: ID!): User
users: [User]
}
extend type Mutation {
createUser(input: CreateUserInput!): User!
updateUser(id: ID!, input: UpdateUserInput!): User
}