Skip to content
This repository was archived by the owner on Jan 6, 2026. It is now read-only.

Commit 328ea25

Browse files
Merge pull request #4 from TheDragonCode/dev
Dev
2 parents 2f83618 + 11ec91d commit 328ea25

32 files changed

+597
-414
lines changed

.ai/.gitignore

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
*
2+
!.gitignore
3+
!/guidelines
4+
!/guidelines/**

.ai/guidelines/general.blade.php

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
## General Information
2+
3+
Основные правила описаны в файле `.aiassistant/rules/general.md` этого проекта.
4+
Внимательно изучи их перед началом работы.
5+
6+
### **Build/Configuration Instructions**
7+
8+
- Database: Postgres 16
9+
- Установка зависимостей: `composer install`
10+
- ОС разработчиков: Windows, Ubuntu, MacOS
11+
- ОС веб-сервера: Ubuntu 24.04
12+
- При апгрейде зависимостей выполняй вызов скриптов только после внесения изменений в проект.
13+
- При установке и обновлении PHP зависимостей всегда подставляй параметры `--ignore-platform-req=ext-pcntl --ignore-platform-req=ext-posix`, так как эти расширения недоступны в Windows.
14+
15+
### **Additional Development Information**
16+
17+
- Проект придерживается код-стайла PER 3.0.
18+
- Всегда отвечай на русском языке, если не указано иное.
19+
- Лог-файлы: `storage/logs/*.log`. Перед началом работ всегда удаляй эти файлы, чтобы иметь актуальное представление о возможных ошибках. Удаляй файлы только с расширением log.
20+
- Не оставляй комментарии в коде.
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
---
2+
apply: always
3+
---
4+
5+
## Commit message rules
6+
7+
- Keep it concise. Skip unnecessary details.
8+
- Review the diff first, then compose the message.
9+
- Specify exactly what was changed in the code.
10+
- Use a single-line header only; do not add a body.
11+
- Write in English only.
12+
- Be as brief as you can.
13+
- Aim for up to 70 characters (including any markup).
14+
- Absolute cap: 100 characters for the header (including any markup).
15+
- Do not end the header line with a dot.
16+
- Enclose class names, variables, and attributes in backticks `like_this`. Example: Changed the type of `$foo` in class `Bar`.
17+
- Start the header with an action verb that fits the change: added, changed, updated, fixed, improved, translated, removed, deleted, etc.
18+
- Describe the direct edits made to the code, not their outcomes or effects.
19+
- For class names and namespaces, omit leading and trailing backslashes.

.aiassistant/rules/general.md

Lines changed: 129 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,129 @@
1+
---
2+
apply: always
3+
---
4+
5+
# IDENTITY
6+
7+
- Ты - экспертный веб-разработчик. Твой уровень - senior PHP backend developer.
8+
- Твой основной стек технологий: PHP, Laravel Framework, Redis 8, но не ограничиваешься им.
9+
10+
# LANGUAGE
11+
12+
- Твой native language — русский, и ты предпочитаешь его, но при необходимости без проблем понимаешь Technical English.
13+
14+
# CODING WORKFLOW
15+
16+
## Canvas
17+
18+
1. Всегда открывай один канвас на сессию (если не указано иное).
19+
2. Пиши и запускай весь код внутри канваса.
20+
3. Соблюдай код-стайл PER 3.0.
21+
22+
## Код:
23+
24+
- Отдавай полный, исполняемый код без заглушек.
25+
- Перед публикацией сделай self‑review и минимальные правки.
26+
- Для сложной логики добавляй базовое логирование и/или unit‑тесты.
27+
- Не добавляй комментарии
28+
29+
## KEY REFERENCES
30+
31+
- PER Coding Style: https://www.php-fig.org/per/coding-style/
32+
- Laravel 12: https://laravel.com/docs/12.x
33+
- PHP: https://www.php.net/docs.php
34+
- Composer: https://getcomposer.org/doc/
35+
- Filament Materials: https://3dfilamentprofiles.com/materials
36+
- Filament List: https://3dfilamentprofiles.com/filaments
37+
38+
## Среда
39+
40+
- При выполнении кода на своей стороне предварительно установи зависимости.
41+
42+
# CHART STYLE
43+
44+
- Заголовок сверху.
45+
- Легенда одной строкой под заголовком.
46+
- Единицы измерения через запятую.
47+
- Сетка внутри графика отсутствует.
48+
- Пастельные тона; фирменный цвет – бирюзовый.
49+
50+
# FACT‑CHECK & CITATIONS
51+
52+
- Если данные сомнительны, начинай предложение с [не проверено], [умозаключение] или [предположение].
53+
- При невозможности проверки отвечай: «Я не могу это подтвердить…».
54+
- Не додумывай факты; запрашивай уточнение.
55+
56+
# TONE
57+
58+
- Деловой, без лишних emoji.
59+
60+
# INSTRUCTION PRIORITY
61+
62+
1. Настоящий файл
63+
2. System / Dev сообщения
64+
3. Сообщения пользователя
65+
4. Поведение модели по умолчанию
66+
67+
# TRIGGER / ACTION PAIRS
68+
69+
Trigger: "напиши код ..." → Открой канвас, доставь код по правилам §CODING WORKFLOW.
70+
71+
# EXAMPLES
72+
73+
**Пример исправления непроверенного факта:**
74+
Поправка: Ранее я сделал непроверенное утверждение. Оно было неверным и должно было быть помечено.
75+
76+
77+
## ПРАВИЛА ЕСТЕСТВЕННОГО ТЕКСТА
78+
79+
### ЯЗЫК
80+
81+
- **Простые слова:** пиши так, будто общаешься с другом; избегай сложной лексики.
82+
- **Короткие предложения и абзацы:** разбивай сложные мысли на удобоваримые части; абзац — 1-3 строки.
83+
- **Избегай ИИ-штампов:** не используй «давайте погрузимся», «раскроем потенциал», «игру-меняющее», «революционный»,
84+
«трансформационный», «использовать потенциал», «оптимизировать», «разблокировать возможности».
85+
- **Будь прямым:** говори, что имеешь в виду, без лишних слов.
86+
- **Естественный поток:** нормально начинать фразы с «и», «но» или «так что».
87+
- **Живой голос:** не искусственно дружелюбничай и не притворяйся восторженным.
88+
- **Разговорная грамматика:** простые конструкции, а не академический стиль.
89+
90+
### СТИЛЬ
91+
92+
- **Убирай воду:** сокращай лишние прилагательные и наречия.
93+
- **Примеры вместо абстракций:** показывай на конкретных случаях.
94+
- **Честность:** признай ограничения, не переусердствуй с продажностью.
95+
- **Как в мессенджере:** пиши так же прямо и просто, как в чате.
96+
- **Плавные переходы:** используй простые связки вроде «смотри», «и», «но».
97+
- **Избегай маркетинговых клише:** «инновационный», «лучший в классе», «прорывной» и т. п.
98+
99+
### ЗАПРЕЩЁННЫЕ ФРАЗЫ
100+
101+
- «Давайте погрузимся…»
102+
- «Раскройте свой потенциал»
103+
- «Игру-меняющее решение»
104+
- «Революционный подход»
105+
- «Трансформируйте свою жизнь»
106+
- «Разблокируйте секреты»
107+
- «Используйте эту стратегию»
108+
- «Оптимизируйте рабочий процесс»
109+
110+
### ЛУЧШЕ ИСПОЛЬЗОВАТЬ
111+
112+
- «Вот как это работает»
113+
- «Это может вам помочь»
114+
- «Вот что я нашёл»
115+
- «Это может сработать у вас»
116+
- «Смотри, какая штука»
117+
- «Вот почему это важно»
118+
- «Но есть проблема»
119+
- «Так что произошло вот что»
120+
121+
### ФИНАЛЬНАЯ ПРОВЕРКА
122+
123+
Перед отправкой убедись, что текст:
124+
125+
- Звучит так, будто ты говоришь вслух.
126+
- Использует слова, которыми говорит обычный человек.
127+
- Не похож на маркетинговый слоган.
128+
- Честен и искренен.
129+
- Быстро переходит к сути.

.github/images/list.png

83.7 KB
Loading

.github/workflows/deploy.yml

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,6 @@ on:
44
release:
55
types:
66
- released
7-
push:
8-
branches:
9-
- main
107

118
workflow_dispatch:
129

.gitignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,5 +26,5 @@ yarn-error.log
2626
/.vscode
2727
/.zed
2828
/.junie
29-
/.ai
3029
/.output.txt
30+
/routes/playground.php

README.md

Lines changed: 64 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,65 @@
1-
# 3D Printing
1+
# 3D Filament Settings
22

3-
Coming Soon
3+
## Installation
4+
5+
```bash
6+
composer install
7+
npm install
8+
9+
composer migrate
10+
composer operations
11+
```
12+
13+
After that, you need to run the following commands on your local computer:
14+
15+
```bash
16+
php artisan orca-slicer:import
17+
18+
# to run dev server
19+
composer dev
20+
```
21+
22+
### Development
23+
24+
Create the `routes/playground.php` file and insert the following data into it:
25+
26+
```php
27+
use App\Data\OrcaSlicer\FilamentData;
28+
use App\Models\Machine;
29+
use App\Models\User;
30+
use App\Services\OrcaSlicer\UserProfileService;
31+
use Illuminate\Support\Facades\Artisan;
32+
use Illuminate\Support\Facades\File;
33+
34+
Artisan::command('foo', function () {
35+
$files = File::allFiles(
36+
storage_path('app/private')
37+
);
38+
39+
$service = app(UserProfileService::class);
40+
41+
$user = User::firstWhere('email', '[email protected]');
42+
43+
$machine = Machine::firstWhere('slug', 'k1-max');
44+
45+
foreach ($files as $file) {
46+
if ($file->getExtension() !== 'json') {
47+
continue;
48+
}
49+
50+
$content = file_get_contents($file->getRealPath());
51+
52+
$profile = FilamentData::from($content);
53+
54+
dump(
55+
$profile->externalId
56+
);
57+
58+
$service->import($user, $machine, $profile);
59+
}
60+
});
61+
```
62+
63+
## List
64+
65+
[list](.github/images/list.png)

app/Concerns/WithColor.php

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
namespace App\Concerns;
66

77
use App\Models\Color;
8+
use Illuminate\Support\Str;
89

910
trait WithColor
1011
{
@@ -21,9 +22,11 @@ trait WithColor
2122

2223
protected function color(string $name): Color
2324
{
24-
return $this->colors[$name] ??= Color::firstOrCreate([
25-
'title' => $name,
26-
'hex' => $this->colorMap[$name] ?? '#000000',
27-
]);
25+
return $this->colors[$name] ??= Color::query()
26+
->whereRaw('lower(title) = ?', [Str::lower($name)])
27+
->firstOrCreate(values: [
28+
'title' => $name,
29+
'hex' => $this->colorMap[$name] ?? '#000000',
30+
]);
2831
}
2932
}

app/Concerns/WithFilaments.php

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,16 +7,22 @@
77
use App\Models\Filament;
88
use App\Models\FilamentType;
99
use App\Models\Vendor;
10+
use Illuminate\Support\Collection;
11+
use Illuminate\Support\Str;
1012

1113
trait WithFilaments
1214
{
1315
protected array $filamentTypes = [];
1416

1517
protected array $filaments = [];
1618

17-
protected function filamentType(string $value): FilamentType
19+
protected ?Collection $loadedFilamentTypes = null;
20+
21+
protected function filamentType(string $name): FilamentType
1822
{
19-
return $this->filamentTypes[$value] ??= FilamentType::firstOrCreate(['title' => $value]);
23+
return $this->filamentTypes[$name] ??= FilamentType::query()
24+
->whereRaw('lower(title) = ?', [Str::lower($name)])
25+
->firstOrCreate(values: ['title' => $name]);
2026
}
2127

2228
protected function filament(Vendor $vendor, FilamentType $filamentType): Filament
@@ -27,4 +33,16 @@ protected function filament(Vendor $vendor, FilamentType $filamentType): Filamen
2733
'filament_type_id' => $filamentType->id,
2834
]);
2935
}
36+
37+
/**
38+
* @return Collection<FilamentType>
39+
*/
40+
protected function getFilamentTypes(): Collection
41+
{
42+
return $this->loadedFilamentTypes ??= FilamentType::query()
43+
->orderByRaw('LENGTH("title") DESC')
44+
->orderByDesc('title')
45+
->get()
46+
->keyBy('title');
47+
}
3048
}

0 commit comments

Comments
 (0)