Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
42 changes: 42 additions & 0 deletions app/GraphQL/Mutations/CreateProjectMutation.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
<?php

declare(strict_types=1);

namespace App\GraphQL\Mutations;

use App\Models\Project;
use Closure;
use GraphQL\Type\Definition\ResolveInfo;
use GraphQL\Type\Definition\Type;
use Rebing\GraphQL\Support\Facades\GraphQL;
use Rebing\GraphQL\Support\Mutation;
use Rebing\GraphQL\Support\SelectFields;

class CreateProjectMutation extends Mutation
{
protected $attributes = [
'name' => 'createProject',
'description' => 'A mutation to create project'
];

public function type(): Type
{
return GraphQL::type('Project');
}

public function args(): array
{
return [
'name' => [
'type' => Type::nonNull(Type::string()),
'name' => 'name',
],
];
}

public function resolve($root, array $args, $context, ResolveInfo $resolveInfo, Closure $getSelectFields)
{

return Project::create($args);
}
}
55 changes: 55 additions & 0 deletions app/GraphQL/Mutations/CreateTaskMutation.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
<?php

declare(strict_types=1);

namespace App\GraphQL\Mutations;

use App\Models\Task;
use Closure;
use GraphQL\Type\Definition\ResolveInfo;
use GraphQL\Type\Definition\Type;
use Rebing\GraphQL\Support\Facades\GraphQL;
use Rebing\GraphQL\Support\Mutation;
use Rebing\GraphQL\Support\SelectFields;

class CreateTaskMutation extends Mutation
{
protected $attributes = [
'name' => 'createTask',
'description' => 'A mutation to create task'
];

public function type(): Type
{
return GraphQL::type('Task');
}

public function args(): array
{
return [
'name' => [
'type' => Type::nonNull(Type::string()),
'description' => 'Task name/description',
],
'priority' => [
'type' => Type::nonNull(Type::string()),
'description' => 'Task priority (Backlog, Low, Medium, High, Urgent)',
],
'project_id' => [
'type' => Type::int(),
'description' => 'Task assigned project ID',
],
];
}

public function resolve($root, array $args, $context, ResolveInfo $resolveInfo, Closure $getSelectFields)
{
$order = Task::count() + 1;
return Task::create([
'name' => $args['name'],
'priority' => $args['priority'],
'project_id' => $args['project_id'],
'order' => $order,
]);
}
}
40 changes: 40 additions & 0 deletions app/GraphQL/Queries/ProjectQuery.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
<?php

declare(strict_types=1);

namespace App\GraphQL\Queries;

use App\Models\Project;
use Closure;
use GraphQL\Type\Definition\ResolveInfo;
use GraphQL\Type\Definition\Type;
use Rebing\GraphQL\Support\Facades\GraphQL;
use Rebing\GraphQL\Support\Query;

class ProjectQuery extends Query
{
protected $attributes = [
'name' => 'project',
'description' => 'A query to get one project using the ID'
];

public function type(): Type
{
return GraphQL::type('Project');
}

public function args(): array
{
return [
'id' => [
'name' => 'id',
'type' => Type::int(),
],
];
}

public function resolve($root, array $args, $context, ResolveInfo $resolveInfo, Closure $getSelectFields)
{
return Project::findOrFail($args['id']);
}
}
30 changes: 30 additions & 0 deletions app/GraphQL/Queries/ProjectsQuery.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
<?php

declare(strict_types=1);

namespace App\GraphQL\Queries;

use App\Models\Project;
use Closure;
use GraphQL\Type\Definition\ResolveInfo;
use GraphQL\Type\Definition\Type;
use Rebing\GraphQL\Support\Facades\GraphQL;
use Rebing\GraphQL\Support\Query;

class ProjectsQuery extends Query
{
protected $attributes = [
'name' => 'projects',
'description' => 'A query for retrieve all the available projects'
];

public function type(): Type
{
return Type::listOf(GraphQL::type('Project'));
}

public function resolve($root, array $args, $context, ResolveInfo $resolveInfo, Closure $getSelectFields)
{
return Project::with('tasks')->get();
}
}
40 changes: 40 additions & 0 deletions app/GraphQL/Queries/TaskQuery.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
<?php

declare(strict_types=1);

namespace App\GraphQL\Queries;

use Closure;
use App\Models\Task;
use GraphQL\Type\Definition\Type;
use Rebing\GraphQL\Support\Query;
use GraphQL\Type\Definition\ResolveInfo;
use Rebing\GraphQL\Support\Facades\GraphQL;

class TaskQuery extends Query
{
protected $attributes = [
'name' => 'task',
'description' => 'A query to get a task'
];

public function type(): Type
{
return GraphQL::type('Task');
}

public function args(): array
{
return [
'id' => [
'name' => 'id',
'type' => Type::int(),
],
];
}

public function resolve($root, array $args, $context, ResolveInfo $resolveInfo, Closure $getSelectFields)
{
return Task::findOrFail($args['id']);
}
}
38 changes: 38 additions & 0 deletions app/GraphQL/Queries/TasksQuery.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
<?php

declare(strict_types=1);

namespace App\GraphQL\Queries;

use App\Models\Task;
use Closure;
use GraphQL\Type\Definition\ResolveInfo;
use GraphQL\Type\Definition\Type;
use Rebing\GraphQL\Support\Facades\GraphQL;
use Rebing\GraphQL\Support\Query;

class TasksQuery extends Query
{
protected $attributes = [
'name' => 'tasks',
'description' => 'A query to retrieve all tasks',
];

public function type(): Type
{
return Type::listOf(GraphQL::type('Task'));
}

public function args(): array
{
return [

];
}

public function resolve($root, array $args, $context, ResolveInfo $resolveInfo, Closure $getSelectFields)
{

return Task::all();
}
}
40 changes: 40 additions & 0 deletions app/GraphQL/Queries/UserQuery.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
<?php

declare(strict_types=1);

namespace App\GraphQL\Queries;

use App\Models\User;
use Closure;
use GraphQL\Type\Definition\ResolveInfo;
use GraphQL\Type\Definition\Type;
use Rebing\GraphQL\Support\Facades\GraphQL;
use Rebing\GraphQL\Support\Query;

class UserQuery extends Query
{
protected $attributes = [
'name' => 'user',
'description' => 'A query to get a user'
];

public function type(): Type
{
return GraphQL::type('User');
}

public function args(): array
{
return [
'id' => [
'name' => 'id',
'type' => Type::int(),
],
];
}

public function resolve($root, array $args, $context, ResolveInfo $resolveInfo, Closure $getSelectFields)
{
return User::findOrFail($args['id']);
}
}
38 changes: 38 additions & 0 deletions app/GraphQL/Queries/UsersQuery.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
<?php

declare(strict_types=1);

namespace App\GraphQL\Queries;

use Closure;
use App\Models\User;
use GraphQL\Type\Definition\Type;
use Rebing\GraphQL\Support\Query;
use GraphQL\Type\Definition\ResolveInfo;
use Rebing\GraphQL\Support\Facades\GraphQL;
use Rebing\GraphQL\Support\SelectFields;

class UsersQuery extends Query
{
protected $attributes = [
'name' => 'users',
'description' => 'A query to retrieve all users'
];

public function type(): Type
{
return Type::listOf(GraphQL::type('User'));
}

public function args(): array
{
return [

];
}

public function resolve($root, array $args, $context, ResolveInfo $resolveInfo, Closure $getSelectFields)
{
return User::all();
}
}
35 changes: 35 additions & 0 deletions app/GraphQL/Types/ProjectType.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
<?php

declare(strict_types=1);

namespace App\GraphQL\Types;

use GraphQL\Type\Definition\Type;
use Rebing\GraphQL\Support\Facades\GraphQL;
use Rebing\GraphQL\Support\Type as GraphQLType;

class ProjectType extends GraphQLType
{
protected $attributes = [
'name' => 'Project',
'description' => 'A project type'
];

public function fields(): array
{
return [
'id' => [
'type' => Type::nonNull(Type::int()),
'description' => 'Project ID',
],
'name' => [
'type' => Type::nonNull(Type::string()),
'description' => 'Project name',
],
'tasks' => [
'type' => Type::listOf(GraphQL::type('Task')),
'description' => 'Task assigned to project'
],
];
}
}
Loading