= **Имплементација** = === - Организација на контролата врз верзии на изворниот код === За контрола врз верзиите на изворниот код ќе се користи алатката Git. === - Изворен код === **[https://develop.finki.ukim.mk/projects/SaveSpace/browser Извор - SaveSpace]** === - Имплементациски дијаграм === Во овој дел ќе бидат прествени и објаснати одредени функционалности од системот кои се користат нај често во рамки на системот. Ќе започнам со објаснување за начинот на креирање на оддел кој што е предуслов за креирање на фолдер т.е. документ.\\ Во MVC системот моделот е објект кој се состои од податоци во одредена табела во база. View го претставува интерфејсот преку кој корисникот комуницира со апликацијата. Кога корисникот презема акција, контролорот се справува со акцијата и ги ажурира податоците во база преку моделот доколку е потребно.\\ Во Laravel, моделот обично е класа со променливи што одговараат на колоните во базата на податоци т.е. променливите кои се дефинирани во Migrations во одредена табела. Контролерите се одговорни за завршување на корисничките дејства и за управување со деловната логика на апликацијата. Рутирањето на ресурсите во Laravel ги доделува „CRUD“ операциите или функциите дефинирани во контролерот со една линија код.\\ {{{ class Department extends Model { use HasFactory; protected $table = "departments"; protected $fillable = ["name", "code", "location", "user_id", "no_of_folders"]; protected $casts = [ 'created_at' => 'datetime:d-m-Y', ]; public function folder(){ return $this->hasMany(Folder::class); } public function getCreatedByName() { return User::where('id', $this->user_id)->pluck('username')->first(); } } }}} ''Department моделот''\\ Во горенаведениот код се запишани променливите кои претходно биле дефнирани во табелата Departments. Исто така во овој дел се дефинираат и релации помеѓу два или повеке модели. Во конкретниот случај е дефинирана релација помеѓу Department и Folder моделот каде што се означува дека еден оддел може да има неколку фолдери. Може да се дефинираат и методи кои влечат одредени податоци од истиот модел како што методот getCreatedByName() кој го наоѓа корисничкото име од User модел-от и истиот може потоа да се прикаже во интерфејс на апликацијата преку класата Department. {{{ public function index() { return view("dashboard.departments.index")->with([ "departments" => Department::all(), ]); } }}} ''Метод од контролерот DepartmentsController за приказ на сите оддели запишани во база''\\ Методот index се повикува кога рутата /departments е вчитана со методот GET HTTP. Во овој метод, ние ги преземаме сите достапни податоци во табелата со оддели користејќи го моделот Department и го пренесуваме во интерфејсот вкако променлива. Ова значи дека во интерфејсот, променливата $departments ќе може да се користи за да се прикажат податоци од колекцијата која ги состои сите оддели. {{{ // Departments view Route::group(['middleware' => 'permission:view_all_departments'], function () { Route::get("/departments", "Dashboard\DepartmentsController@index")->name("dashboard.departments.index"); }); // Departments manage Route::group(['middleware' => 'permission:manage_all_departments'], function () { Route::post("/departments/store", "Dashboard\DepartmentsController@store")->name("dashboard.departments.store"); Route::get("/departments/{id}/edit", "Dashboard\DepartmentsController@editShow")->name("dashboard.departments.editShow"); Route::patch("/departments/{id}/edit", "Dashboard\DepartmentsController@edit")->name("dashboard.departments.edit"); }); }}} ''Листа на рути за оддели''\\ Секој повик во Laravel потребно е да има посебна рута. Рутата со име index ја дефинирав посебно за да се ограничи пристапот за корисници кои имаат ролја во која не е дозволено да управуваат со оддели. Рутата store служи за креирање на нов оддел. Методот во оваа рута е post затоа што треба да се запишуваат нови податоци т.е. да се креира нов оддел. Кога се работи за приказ на податоци се користи методот get како што е рутата editShow која служи за приказ на еден оддел. Методот patch се повикува кога се прави ажурирање на податоците во база што во овој случај е рутата со име edit. На двете рути за да прикажат и ажурираат оддел потребно им е да се додели вредност id која означува id на одделот во табела. {{{ public function store(NewDepartmentRequest $request) { $department = new Department(); $department->name = $request->name; $department->code = $request->code; $location = 'Departments' . DIRECTORY_SEPARATOR . $request->code; if(!Storage::disk('local')->has($location)){ Storage::disk('local')->makeDirectory($location); } $department->location = $location; $department->user_id = auth()->id(); $users = User::all(); $department->save(); Alert::flash("New Department added successfully"); return redirect()->route("dashboard.departments.index"); } }}} ''Метод од контролерот DepartmentsController за креирање на нов оддел''\\ Како што може да се види и во кодот методот како влезен параметар има објект од класата NewDepartmentRequest каде што се прави валидацијата на променливите од моделот Department.