# GD2021
## Graphql
#### 輪播圖
```graphql=
extend type Query {
homePhotos(type: HomePhotoType @whereLike(key: "type")): [HomePhoto!]! @all
}
type HomePhoto {
id: ID!
type: String
url: String
photo: String
}
enum HomePhotoType{
HOME @enum(value: "home_img")
ADVERTISING @enum(value: "show_img")
PROVIDER @enum(value: "provider_img")
CONSULTANT @enum(value: "consultant_img")
}
```
#### 標籤
```graphql=
extend type Query {
tags(tagType: TagType! @eq(key: "tag_type")): [Tag!]! @all
}
type Tag {
id: ID!
name: String
icon: String
}
enum TagType{
NEWS @enum(value: "news")
EVENT @enum(value: "event")
MATCHING @enum(value: "matching")
DOWNLOAD @enum(value: "download")
}
```
#### 知識補給
```graphql=
extend type Query {
newsList(tag: String @whereTag): [News!]! @all(scopes: ["published", "ordered"])
news(id: ID! @eq): News @find(scopes: ["published"])
topNews: [News] @all(scopes: ["topped"])
}
type News {
id: ID!
date: DateTimeUtc
title: String
subtitle: String
author: String
authorInfo: String @rename(attribute: "author_info")
content: String
onlineDate: DateTimeUtc @rename(attribute: "online_date")
offlineDate: DateTimeUtc @rename(attribute: "offline_date")
authorImg: String @rename(attribute: "author_img")
allTags: [String] @rename(attribute: "all_tags")
userinfo: Userinfo @belongsTo
docs: [Doc] @morphMany
}
type Doc {
id: ID!
url: String
fileName: String @rename(attribute: "file_name")
}
```
#### 數位學習
```graphql=
extend type Query {
events(
type: EventType @eq(key: "type"),
tag: String @whereTag,
keyword: String @whereLike(key: "title")
startDateBetween: DateRange @whereBetween(key:"start_date")
): [Eventt!]! @all(scopes:["ordered"])
event(id: ID! @eq): Eventt @find
}
type Eventt {
id: ID!
type: String
title: String
youtubeId: String
startDate: DateTimeUtc @rename(attribute: "start_date")
endDate: DateTimeUtc @rename(attribute: "end_date")
onlineDate: DateTimeUtc @rename(attribute: "online_date")
offlineDate: DateTimeUtc @rename(attribute: "offline_date")
location: String
organizer: String
price: Int
quota: Int
applicants: Int
description: String
eventUrl: String @rename(attribute: "event_url")
image: String
mainTag: Tag @belongsTo
tags: [Tag] @belongsToMany
}
enum EventType{
ONLINE @enum(value: "online")
RAISE @enum(value: "raise")
COURSE @enum(value: "course")
}
```
#### 新知脈動
``` graphql=
extend type Query {
popularNews: [Trend] @all(scopes: ["popular"])
latestNews: [Trend] @all(scopes: ["latest"])
recommendedNews: [Trend] @all(scopes: ["recommend"])
}
type Trend {
id: ID!
type: String
news: News @belongsTo
}
```
#### 使用者
``` graphql=
type Query {
users: [User!]! @all
user(id: ID @eq): User @find
}
type User {
id: ID!
name: String!
email: String
type: String
identityId: String @rename(attribute: "identity_id")
createdAt: DateTimeUtc @rename(attribute: "created_at")
updatedAt: DateTimeUtc @rename(attribute: "updated_at")
userinfo: Userinfo @hasOne
}
type Userinfo {
id: ID!
services: [String]
mainTag: Tag @belongsTo
name: String
present: String
facebook: String
weibo: String
website: String
phone: String
address: String
introduction: String
education: String
experience: String
article: String
city: String
businessNo: String @rename(attribute: "business_no")
contact1: String
contactEmail1: String @rename(attribute: "contact_email1")
contactPhone1: String @rename(attribute: "contact_phone1")
contact2: String
contactEmail2: String @rename(attribute: "contact_email2")
contactPhone2: String @rename(attribute: "contact_phone2")
userImg: String
listImg: String
tags: [Tag] @belongsToMany
portfolios: [Portfolio] @hasMany(scopes:["ordered"])
recommendations: [Userinfo]
}
type Portfolio {
description: String
photo: String
}
```
#### 電商輔導
``` graphql=
extend type Query {
providers(
tagIds: [String] @whereHasTags,
keyword: String @whereLike(key: "name")
): [Userinfo] @all(scopes: ["provider", "onlined"])
consultants(
tagIds: [String] @whereHasTags,
keyword: String @whereLike(key: "name")
): [Userinfo] @all(scopes: ["consultant", "onlined"])
provider(id: ID! @eq): Userinfo @find(scopes: ["provider", "onlined"])
consultant(id: ID! @eq): Userinfo @find(scopes: ["consultant", "onlined"])
}
```
#### 檔案下載
``` graphql=
extend type Query {
downloads(
tagId: String @eq(key: "tag_id"),
keyword: String @whereLike(key: "name")
): [Download!]! @all
}
type Download {
id: ID!
title: String
date: DateTimeUtc
doc: Doc @morphOne
tag: Tag @belongsTo
}
```
#### 成功案例
``` graphql=
extend type Query {
successCases: [SuccessCase!]! @all(scopes: ["published"])
successCase(id: ID! @eq): SuccessCase @find(scopes: ["published"])
}
type SuccessCase {
id: ID!
title: String
description: String
companyName: String @rename(attribute: "company_name")
picture: String
}
```
#### 商情資訊
``` graphql=
extend type Query {
businesses: [Business!]! @all(scopes: ["published"])
business(id: ID! @eq): Business @find(scopes: ["published"])
}
type Business {
id: ID!
title: String
content: String
date: DateTimeUtc
}
```
#### 募集活動申請
```graphql=
extend type Mutation {
eventApplication(input: EventApplicationInput! @spread): Boolean @field(resolver: "App\\GraphQL\\Mutations\\EventApplication")
}
input EventApplicationInput {
name: String
email: String
phone: String
company: String
businessNo: String
eventId: String
}
```
#### 點擊數
``` graphql=
extend type Mutation {
click(input: ClickInput! @spread): Boolean @field(resolver: "App\\GraphQL\\Mutations\\Click")
}
input ClickInput {
clickableId: String,
clickableType: ClickableType,
category: CategoryEnum,
}
enum ClickableType{
EVENT @enum(value: "App\\Eventt")
NEWS @enum(value: "App\\News")
USER @enum(value: "App\\Userinfo")
}
enum CategoryEnum{
CLICKS @enum(value: "clicks")
FACEBOOK @enum(value: "facebook")
LINE @enum(value: "line")
}
```
#### 熱搜
``` graphql=
type Query {
keywords(type: KeywordType @eq): [Keyword] @all(scopes: ["ordered"])
}
extend type Mutation {
searchedKeyword(input: SearchedKeywordInput! @spread): Boolean @field(resolver: "App\\GraphQL\\Mutations\\SearchedKeyword")
}
input SearchedKeywordInput {
type: KeywordType,
name: String,
}
enum KeywordType{
EVENT @enum(value: "App\\Eventt")
USER @enum(value: "App\\Userinfo")
}
type Keyword {
id: ID!
name: String
}
```
#### 寄送詢問單
``` graphql=
extend type Mutation {
inquiryForm(input: InquiryFormInput! @spread): Boolean @field(resolver: "App\\GraphQL\\Mutations\\InquiryForm")
}
input InquiryFormInput {
inquiryCategory: String,
content: String,
userinfoId: String,
company: String,
taxId: String,
name: String,
email: String,
phone: String,
industry: String
}
```