Compare commits

...

4 Commits

Author SHA1 Message Date
snipe 89a232ae14 Merge pull request #18266 from Valinwolf/develop
Added endpoint & use_path_style_endpoint configs for public/private S3
2025-11-28 17:39:23 +00:00
Patrick Thomas 6eaefa0bdd Added endpoint & use_path_style_endpoint configs for public/private S3 2025-11-28 17:29:02 +00:00
snipe a272bdc796 Merge pull request #18251 from uberbrady/improve_component_asset_counts
Optimize queries for Components listing
2025-11-26 14:40:14 +00:00
Brady Wetherington 416b32cbc8 Optimize queries for Components listing 2025-11-26 12:36:44 +00:00
6 changed files with 37 additions and 8 deletions
+4
View File
@@ -137,6 +137,8 @@ PUBLIC_AWS_ACCESS_KEY_ID=null
PUBLIC_AWS_DEFAULT_REGION=null PUBLIC_AWS_DEFAULT_REGION=null
PUBLIC_AWS_BUCKET=null PUBLIC_AWS_BUCKET=null
PUBLIC_AWS_URL=null PUBLIC_AWS_URL=null
PUBLIC_AWS_ENDPOINT=null
PUBLIC_AWS_PATH_STYLE=null
PUBLIC_AWS_BUCKET_ROOT=null PUBLIC_AWS_BUCKET_ROOT=null
# -------------------------------------------- # --------------------------------------------
@@ -147,6 +149,8 @@ PRIVATE_AWS_SECRET_ACCESS_KEY=null
PRIVATE_AWS_DEFAULT_REGION=null PRIVATE_AWS_DEFAULT_REGION=null
PRIVATE_AWS_BUCKET=null PRIVATE_AWS_BUCKET=null
PRIVATE_AWS_URL=null PRIVATE_AWS_URL=null
PRIVATE_AWS_ENDPOINT=null
PRIVATE_AWS_PATH_STYLE=null
PRIVATE_AWS_BUCKET_ROOT=null PRIVATE_AWS_BUCKET_ROOT=null
# -------------------------------------------- # --------------------------------------------
+4
View File
@@ -144,6 +144,8 @@ PUBLIC_AWS_ACCESS_KEY_ID=null
PUBLIC_AWS_DEFAULT_REGION=null PUBLIC_AWS_DEFAULT_REGION=null
PUBLIC_AWS_BUCKET=null PUBLIC_AWS_BUCKET=null
PUBLIC_AWS_URL=null PUBLIC_AWS_URL=null
PUBLIC_AWS_ENDPOINT=null
PUBLIC_AWS_PATH_STYLE=null
PUBLIC_AWS_BUCKET_ROOT=null PUBLIC_AWS_BUCKET_ROOT=null
# -------------------------------------------- # --------------------------------------------
@@ -154,6 +156,8 @@ PRIVATE_AWS_SECRET_ACCESS_KEY=null
PRIVATE_AWS_DEFAULT_REGION=null PRIVATE_AWS_DEFAULT_REGION=null
PRIVATE_AWS_BUCKET=null PRIVATE_AWS_BUCKET=null
PRIVATE_AWS_URL=null PRIVATE_AWS_URL=null
PRIVATE_AWS_ENDPOINT=null
PRIVATE_AWS_PATH_STYLE=null
PRIVATE_AWS_BUCKET_ROOT=null PRIVATE_AWS_BUCKET_ROOT=null
# -------------------------------------------- # --------------------------------------------
+4
View File
@@ -143,6 +143,8 @@ PUBLIC_AWS_ACCESS_KEY_ID=null
PUBLIC_AWS_DEFAULT_REGION=null PUBLIC_AWS_DEFAULT_REGION=null
PUBLIC_AWS_BUCKET=null PUBLIC_AWS_BUCKET=null
PUBLIC_AWS_URL=null PUBLIC_AWS_URL=null
PUBLIC_AWS_ENDPOINT=null
PUBLIC_AWS_PATH_STYLE=null
PUBLIC_AWS_BUCKET_ROOT=null PUBLIC_AWS_BUCKET_ROOT=null
# -------------------------------------------- # --------------------------------------------
@@ -153,6 +155,8 @@ PRIVATE_AWS_SECRET_ACCESS_KEY=null
PRIVATE_AWS_DEFAULT_REGION=null PRIVATE_AWS_DEFAULT_REGION=null
PRIVATE_AWS_BUCKET=null PRIVATE_AWS_BUCKET=null
PRIVATE_AWS_URL=null PRIVATE_AWS_URL=null
PRIVATE_AWS_ENDPOINT=null
PRIVATE_AWS_PATH_STYLE=null
PRIVATE_AWS_BUCKET_ROOT=null PRIVATE_AWS_BUCKET_ROOT=null
# -------------------------------------------- # --------------------------------------------
@@ -58,8 +58,8 @@ class ComponentsController extends Controller
]; ];
$components = Component::select('components.*') $components = Component::select('components.*')
->with('company', 'location', 'category', 'assets', 'supplier', 'adminuser', 'manufacturer', 'uncontrainedAssets') ->with('company', 'location', 'category', 'supplier', 'adminuser', 'manufacturer')
->withSum('uncontrainedAssets', 'components_assets.assigned_qty'); ->withSum('uncontrainedAssets as sum_unconstrained_assets', 'components_assets.assigned_qty');
$filter = []; $filter = [];
@@ -112,7 +112,8 @@ class ComponentsController extends Controller
} }
// Make sure the offset and limit are actually integers and do not exceed system limits // Make sure the offset and limit are actually integers and do not exceed system limits
$offset = ($request->input('offset') > $components->count()) ? $components->count() : app('api_offset_value'); $components_count = $components->count();
$offset = ($request->input('offset') > $components_count) ? $components_count : app('api_offset_value');
$limit = app('api_limit_value'); $limit = app('api_limit_value');
$order = $request->input('order') === 'asc' ? 'asc' : 'desc'; $order = $request->input('order') === 'asc' ? 'asc' : 'desc';
@@ -143,7 +144,7 @@ class ComponentsController extends Controller
break; break;
} }
$total = $components->count(); $total = $components_count;
$components = $components->skip($offset)->take($limit)->get(); $components = $components->skip($offset)->take($limit)->get();
return (new ComponentsTransformer)->transformComponents($components, $total); return (new ComponentsTransformer)->transformComponents($components, $total);
+15 -3
View File
@@ -238,14 +238,26 @@ class Component extends SnipeModel
* @since [v5.0] * @since [v5.0]
* @return int * @return int
*/ */
public function numCheckedOut() public function numCheckedOut(bool $recalculate = false)
{ {
$checkedout = 0; /**
*
* WARNING: This method caches the result, so if you're doing something
* that is going to change the number of checked-out items, make sure to pass
* 'true' as the first parameter to force this to recalculate the number of checked-out
* items!!!!!
*
*/
// In case there are elements checked out to assets that belong to a different company // In case there are elements checked out to assets that belong to a different company
// than this asset and full multiple company support is on we'll remove the global scope, // than this asset and full multiple company support is on we'll remove the global scope,
// so they are included in the count. // so they are included in the count.
return $this->uncontrainedAssets->sum('pivot.assigned_qty'); if (is_null($this->sum_unconstrained_assets) || $recalculate) {
// This, in a components-listing context, is mostly important for when it sets a 'zero' which
// is *not* null - so we don't have to keep recalculating for un-checked-out components
$this->sum_unconstrained_assets = $this->uncontrainedAssets()->sum('assigned_qty') ?? 0;
}
return $this->sum_unconstrained_assets;
} }
+5 -1
View File
@@ -63,6 +63,8 @@ $config = [
'region' => env('PUBLIC_AWS_DEFAULT_REGION'), 'region' => env('PUBLIC_AWS_DEFAULT_REGION'),
'bucket' => env('PUBLIC_AWS_BUCKET'), 'bucket' => env('PUBLIC_AWS_BUCKET'),
'url' => env('PUBLIC_AWS_URL'), 'url' => env('PUBLIC_AWS_URL'),
'endpoint' => env('PUBLIC_AWS_ENDPOINT'),
'use_path_style_endpoint' => env('PUBLIC_AWS_PATH_STYLE'),
'root' => env('PUBLIC_AWS_BUCKET_ROOT'), 'root' => env('PUBLIC_AWS_BUCKET_ROOT'),
'visibility' => 'public' 'visibility' => 'public'
], ],
@@ -78,6 +80,8 @@ $config = [
'region' => env('PRIVATE_AWS_DEFAULT_REGION'), 'region' => env('PRIVATE_AWS_DEFAULT_REGION'),
'bucket' => env('PRIVATE_AWS_BUCKET'), 'bucket' => env('PRIVATE_AWS_BUCKET'),
'url' => env('PRIVATE_AWS_URL'), 'url' => env('PRIVATE_AWS_URL'),
'endpoint' => env('PRIVATE_AWS_ENDPOINT'),
'use_path_style_endpoint' => env('PRIVATE_AWS_PATH_STYLE'),
'root' => env('PRIVATE_AWS_BUCKET_ROOT'), 'root' => env('PRIVATE_AWS_BUCKET_ROOT'),
'visibility' => 'private' 'visibility' => 'private'
], ],
@@ -168,4 +172,4 @@ $config['allowed_upload_mimetypes'] = implode(',', $config['allowed_upload_mimet
$config['allowed_upload_extensions_for_validator'] = implode(',', $config['allowed_upload_extensions_array']); $config['allowed_upload_extensions_for_validator'] = implode(',', $config['allowed_upload_extensions_array']);
$config['allowed_upload_extensions'] = '.'.implode(', .', $config['allowed_upload_extensions_array']); $config['allowed_upload_extensions'] = '.'.implode(', .', $config['allowed_upload_extensions_array']);
return $config; return $config;