diff --git a/app/Http/Controllers/Admin/Nodes/Addresses/AddressController.php b/app/Http/Controllers/Admin/Nodes/Addresses/AddressController.php
index 3a246abc777..71d50a374ee 100644
--- a/app/Http/Controllers/Admin/Nodes/Addresses/AddressController.php
+++ b/app/Http/Controllers/Admin/Nodes/Addresses/AddressController.php
@@ -80,9 +80,9 @@ public function search(Node $node, Request $request)
if ($request->show_available_ips)
{
- return $builder->where('server_id', null)->get();
+ $builder = $builder->where('server_id', null);
}
- return $builder->get();
+ return $builder->paginate($request->query('per_page') ?? 50);
}
}
diff --git a/app/Http/Controllers/Admin/Templates/TemplateController.php b/app/Http/Controllers/Admin/Templates/TemplateController.php
index 096033f916c..1ac3d16cf7d 100644
--- a/app/Http/Controllers/Admin/Templates/TemplateController.php
+++ b/app/Http/Controllers/Admin/Templates/TemplateController.php
@@ -3,9 +3,25 @@
namespace App\Http\Controllers\Admin\Templates;
use App\Http\Controllers\Controller;
+use App\Models\Node;
+use App\Models\Template;
+use App\Services\Nodes\TemplateService;
use Illuminate\Http\Request;
class TemplateController extends Controller
{
- //
+ public function __construct(private TemplateService $templateService)
+ {
+
+ }
+
+ public function index(Node $node)
+ {
+ return $this->templateService->setNode($node)->getTemplates();
+ }
+
+ public function show(Node $node, Template $template)
+ {
+ return $template;
+ }
}
diff --git a/app/Jobs/Servers/ProcessInstallation.php b/app/Jobs/Servers/ProcessInstallation.php
index bbf6495a968..b3ffa7ea95f 100644
--- a/app/Jobs/Servers/ProcessInstallation.php
+++ b/app/Jobs/Servers/ProcessInstallation.php
@@ -25,7 +25,7 @@ class ProcessInstallation implements ShouldQueue
*
* @var int
*/
- public $timeout = 420;
+ public $timeout = 1000;
/**
* The number of times the job may be attempted.
diff --git a/app/Models/Node.php b/app/Models/Node.php
index a43f8e0a828..a525f0b6203 100644
--- a/app/Models/Node.php
+++ b/app/Models/Node.php
@@ -5,11 +5,10 @@
use App\Rules\Network\Hostname;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
-use Laravel\Scout\Searchable;
class Node extends Model
{
- use HasFactory, Searchable;
+ use HasFactory;
protected $fillable = [
'name', 'cluster', 'hostname', 'token_id', 'secret', 'port'
@@ -37,11 +36,4 @@ public function addresses()
{
return $this->hasMany(IPAddress::class);
}
-
- public function toSearchableArray()
- {
- return [
- 'name' => $this->name
- ];
- }
}
\ No newline at end of file
diff --git a/app/Models/Server.php b/app/Models/Server.php
index 6f8578767f6..e23f8d258f0 100644
--- a/app/Models/Server.php
+++ b/app/Models/Server.php
@@ -4,11 +4,10 @@
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
-use Laravel\Scout\Searchable;
class Server extends Model
{
- use HasFactory, Searchable;
+ use HasFactory;
protected $fillable = [
'name',
@@ -37,11 +36,4 @@ public function template()
{
return $this->hasOne(Template::class);
}
-
- public function toSearchableArray()
- {
- return [
- 'name' => $this->name
- ];
- }
}
\ No newline at end of file
diff --git a/app/Models/User.php b/app/Models/User.php
index 6c7f6857da1..8efb1ec3969 100644
--- a/app/Models/User.php
+++ b/app/Models/User.php
@@ -7,15 +7,13 @@
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Laravel\Sanctum\HasApiTokens;
-use App\Models\Server;
-use Laravel\Scout\Searchable;
/**
* @mixin \Eloquent
*/
class User extends Authenticatable
{
- use HasApiTokens, HasFactory, Notifiable, Searchable;
+ use HasApiTokens, HasFactory, Notifiable;
/**
* The attributes that are mass assignable.
@@ -55,14 +53,4 @@ public function servers()
{
return $this->hasMany(Server::class);
}
-
- /**
- * @return array
- */
- public function toSearchableArray()
- {
- return [
- 'name' => $this->name
- ];
- }
}
diff --git a/resources/js/api/admin/nodes/addresses/searchAddresses.ts b/resources/js/api/admin/nodes/addresses/searchAddresses.ts
index bc7ad543cc9..e558f3405e0 100644
--- a/resources/js/api/admin/nodes/addresses/searchAddresses.ts
+++ b/resources/js/api/admin/nodes/addresses/searchAddresses.ts
@@ -1,8 +1,21 @@
import { Address } from '@/api/admin/nodes/addresses/types'
+import { PaginatedInterface } from '@/api/types/default'
import axios from 'axios'
-export default (query: string, nodeId: number, showAvailableIps: boolean = false) => {
- return axios.get
(route('admin.nodes.show.addresses.search', nodeId), {
- params: { 'filter[*]': query, show_available_ips: showAvailableIps },
- })
+export default (
+ query: string,
+ nodeId: number,
+ showAvailableIps: boolean = false
+) => {
+ return axios.get>(
+ route('admin.nodes.show.addresses.search', {
+ node: nodeId,
+ params: { 'filter[address]': query },
+ }),
+ {
+ params: {
+ show_available_ips: showAvailableIps,
+ },
+ }
+ )
}
diff --git a/resources/js/api/admin/nodes/searchNodes.ts b/resources/js/api/admin/nodes/searchNodes.ts
index 17bfa714dbf..53268385ce6 100644
--- a/resources/js/api/admin/nodes/searchNodes.ts
+++ b/resources/js/api/admin/nodes/searchNodes.ts
@@ -1,8 +1,9 @@
import { Node } from '@/api/admin/nodes/types'
+import { PaginatedInterface } from '@/api/types/default'
import axios from 'axios'
export default (search: string) => {
- return axios.get(
+ return axios.get>(
route('admin.nodes.search', {
params: {
'filter[*]' : search,
diff --git a/resources/js/api/admin/servers/searchServers.ts b/resources/js/api/admin/servers/searchServers.ts
index 0779a0c8bf0..f7ad352ec16 100644
--- a/resources/js/api/admin/servers/searchServers.ts
+++ b/resources/js/api/admin/servers/searchServers.ts
@@ -1,5 +1,6 @@
import axios from 'axios'
import { Server as DefaultServer } from '@/api/server/types'
+import { PaginatedInterface } from '@/api/types/default'
export interface Server extends DefaultServer {
node: {
@@ -9,7 +10,7 @@ export interface Server extends DefaultServer {
}
export default (search: string) => {
- return axios.get(
+ return axios.get>(
route('admin.servers.search', {
params: {
'filter[*]': search,
diff --git a/resources/js/api/admin/servers/templates/types.ts b/resources/js/api/admin/servers/templates/types.ts
index 8f7e8b99c30..3664a0634c7 100644
--- a/resources/js/api/admin/servers/templates/types.ts
+++ b/resources/js/api/admin/servers/templates/types.ts
@@ -5,3 +5,13 @@ export interface Template {
created_at?: string
updated_at?: string
}
+
+export interface ServerTemplate {
+ id: number
+ server_id: number
+ server: {
+ id: number
+ vmid: number
+ name: string
+ }
+}
\ No newline at end of file
diff --git a/resources/js/api/admin/users/searchUsers.ts b/resources/js/api/admin/users/searchUsers.ts
index 77a8a88774b..62a4fa01555 100644
--- a/resources/js/api/admin/users/searchUsers.ts
+++ b/resources/js/api/admin/users/searchUsers.ts
@@ -1,8 +1,8 @@
-import { User } from '@/api/types/default'
+import { PaginatedInterface, User } from '@/api/types/default'
import axios from 'axios'
export default (search: string) => {
- return axios.get(
+ return axios.get>(
route('admin.users.search', {
params: {
'filter[*]' : search,
diff --git a/resources/js/api/server/settings/getTemplates.ts b/resources/js/api/server/settings/getTemplates.ts
index 9107f8cb312..2d9d3231ac5 100644
--- a/resources/js/api/server/settings/getTemplates.ts
+++ b/resources/js/api/server/settings/getTemplates.ts
@@ -1,15 +1,6 @@
+import { ServerTemplate } from '@/api/admin/servers/templates/types'
import axios from 'axios'
-export interface ServerTemplate {
- id: number
- server_id: number
- server: {
- id: number
- vmid: number
- name: string
- }
-}
-
export default (serverId: number) => {
return axios.get(route('servers.show.templates', serverId))
}
\ No newline at end of file
diff --git a/resources/js/api/types/default.ts b/resources/js/api/types/default.ts
index fba3ffc9914..01bfaa7befe 100644
--- a/resources/js/api/types/default.ts
+++ b/resources/js/api/types/default.ts
@@ -15,3 +15,22 @@ export interface AuthInterface {
export interface DefaultProps {
auth: AuthInterface
}
+
+export interface LinkInterface {
+ back?: string
+ next?: string
+}
+
+export interface PaginationInterface {
+ total: number
+ count: number
+ per_page: number
+ current_page: number
+ total_pages: number
+ links: LinkInterface
+}
+
+export interface PaginatedInterface {
+ data: T
+ meta: PaginationInterface
+}
\ No newline at end of file
diff --git a/resources/js/components/nodes/addresses/EditAddressModal.tsx b/resources/js/components/nodes/addresses/EditAddressModal.tsx
index edcdc34d0d9..6568812f349 100644
--- a/resources/js/components/nodes/addresses/EditAddressModal.tsx
+++ b/resources/js/components/nodes/addresses/EditAddressModal.tsx
@@ -71,7 +71,7 @@ const EditAddressModal = ({ node, address, open, setOpen }: Props) => {
const searchServers = useCallback(
debounce(async (query: string) => {
- const { data } = await getSearchServers(query)
+ const { data: { data } } = await getSearchServers(query)
setServers(
data.map((server) => {
return {
diff --git a/resources/js/components/nodes/addresses/NewAddressModal.tsx b/resources/js/components/nodes/addresses/NewAddressModal.tsx
index d43224b0f6e..ff82e01cd3f 100644
--- a/resources/js/components/nodes/addresses/NewAddressModal.tsx
+++ b/resources/js/components/nodes/addresses/NewAddressModal.tsx
@@ -64,7 +64,7 @@ const NewAddressModal = ({node, open, setOpen}: Props) => {
const searchServers = useCallback(
debounce(async (query: string) => {
- const { data } = await getSearchServers(query)
+ const { data: { data } } = await getSearchServers(query)
setServers(
data.map((server) => {
return {
diff --git a/resources/js/pages/admin/servers/Create.tsx b/resources/js/pages/admin/servers/Create.tsx
index 447abe371bc..1b00c926337 100644
--- a/resources/js/pages/admin/servers/Create.tsx
+++ b/resources/js/pages/admin/servers/Create.tsx
@@ -35,7 +35,7 @@ import getSearchNodes from '@/api/admin/nodes/searchNodes'
import SelectItem from '@/components/SelectItem'
import getSearchUsers from '@/api/admin/users/searchUsers'
import { useQuery } from '@tanstack/react-query'
-import getTemplates from '@/api/server/settings/getTemplates'
+import getTemplates from '@/api/admin/nodes/templates/getTemplates'
import getSearchAddresses from '@/api/admin/nodes/addresses/searchAddresses'
interface Props extends DefaultProps {}
@@ -94,7 +94,7 @@ const Create = ({ auth }: Props) => {
const searchNodes = useCallback(
debounce(async (query: string) => {
- const { data } = await getSearchNodes(query)
+ const { data: { data } } = await getSearchNodes(query)
setNodes(
data.map((node) => {
return {
@@ -118,7 +118,7 @@ const Create = ({ auth }: Props) => {
const searchUsers = useCallback(
debounce(async (query: string) => {
- const { data } = await getSearchUsers(query)
+ const { data: { data } } = await getSearchUsers(query)
setUsers(
data.map((user) => {
return {
@@ -141,13 +141,13 @@ const Create = ({ auth }: Props) => {
const searchIps = useCallback(
debounce(async (query: string) => {
- const { data: res } = await getSearchAddresses(
+ const { data: { data } } = await getSearchAddresses(
query,
dataRef.current.node_id as number,
true
)
setIps(
- res.map((ip) => {
+ data.map((ip) => {
return {
label: ip.address,
value: ip.id.toString(),
diff --git a/resources/js/pages/admin/servers/settings/modules/BasicSettings.tsx b/resources/js/pages/admin/servers/settings/modules/BasicSettings.tsx
index 000450b67ea..9906a4192e1 100644
--- a/resources/js/pages/admin/servers/settings/modules/BasicSettings.tsx
+++ b/resources/js/pages/admin/servers/settings/modules/BasicSettings.tsx
@@ -52,7 +52,7 @@ const BasicSettings = () => {
const searchNodes = useCallback(
debounce(async (query: string) => {
- const { data } = await getSearchNodes(query)
+ const { data: { data } } = await getSearchNodes(query)
setNodes(
data.map((node) => {
return {
@@ -76,7 +76,7 @@ const BasicSettings = () => {
const searchUsers = useCallback(
debounce(async (query: string) => {
- const { data } = await getSearchUsers(query)
+ const { data: { data } } = await getSearchUsers(query)
setUsers(
data.map((user) => {
return {
diff --git a/routes/admin.php b/routes/admin.php
index 1bb77818432..a742d82a2f7 100644
--- a/routes/admin.php
+++ b/routes/admin.php
@@ -9,6 +9,7 @@
use App\Http\Controllers\Admin\Servers\Settings;
use App\Http\Controllers\Admin\Users;
use Illuminate\Support\Facades\Route;
+use App\Http\Controllers\Admin\Templates\TemplateController;
Route::get('/', [IndexController::class, 'index'])->name('admin.dashboard');
@@ -31,6 +32,11 @@
Route::get('/', [NodeController::class, 'show'])->name('admin.nodes.show');
Route::delete('/', [NodeController::class, 'destroy']);
+ Route::prefix('/templates')->group(function () {
+ Route::get('/', [TemplateController::class, 'index'])->name('admin.nodes.show.templates');
+ Route::get('/{template}', [TemplateController::class, 'show'])->name('admin.nodes.show.templates.show');
+ });
+
Route::prefix('/addresses')->group(function () {
Route::get('/', [AddressController::class, 'index'])->name('admin.nodes.show.addresses');
Route::post('/', [AddressController::class, 'store']);