diff --git a/app/File.php b/app/File.php index 4e029a2..b9741d0 100644 --- a/app/File.php +++ b/app/File.php @@ -3,6 +3,7 @@ namespace App; use Illuminate\Database\Eloquent\Model; +use TheSeer\Tokenizer\Exception; class File extends Model { @@ -17,6 +18,8 @@ class File extends Model ]; protected $primaryKey = 'hash'; + public $incrementing = false; + protected $keyType = 'string'; /** * The attributes excluded from the model's JSON form. @@ -24,4 +27,27 @@ class File extends Model * @var array */ protected $hidden = ['created_at','updated_at']; + + public static function create(array $attributes = []) + { + if (!isset($attributes['data'])) { + throw new Exception("foo" ); + } + $pos = strpos($attributes['data'], ","); + $image = base64_decode(substr($attributes['data'], $pos + 1), true); + if (!$image) { + throw new Exception("foo" ); + } + $hash = md5(time()); + if (!file_exists('staticimages')) + mkdir('staticimages', 0755, true); + file_put_contents('staticimages/' . $hash, $image); + + $attributes['hash'] = $hash; + return static::query()->create($attributes); + } + + + + } diff --git a/app/Http/Controllers/FileController.php b/app/Http/Controllers/FileController.php index 2a9a074..61840db 100644 --- a/app/Http/Controllers/FileController.php +++ b/app/Http/Controllers/FileController.php @@ -20,17 +20,8 @@ class FileController extends Controller public function create(Request $request) { - $File = File::create($request->all()); - - return response()->json($File, 201); - } - - public function update($id, Request $request) - { - $File = File::findOrFail($id); - $File->update($request->all()); - - return response()->json($File, 200); + $file = File::create($request->only(['data','iid'])); + return response()->json($file, 201); } public function delete($id) diff --git a/app/Http/Controllers/ItemController.php b/app/Http/Controllers/ItemController.php index 066aa4f..1c94846 100644 --- a/app/Http/Controllers/ItemController.php +++ b/app/Http/Controllers/ItemController.php @@ -48,19 +48,11 @@ class ItemController extends Controller $newitem['eid'] = "".$eid; $item = Item::create($newitem); - if ($request->get('dataImage')) { - $pos = strpos($request->get('dataImage'), ","); - //$head = substr($request->get('dataImage'), 0, $pos); - $image = base64_decode(substr($request->get('dataImage'), $pos + 1), true); - if ($image) { - $hash = md5(time()); - if (!file_exists('staticimages')) - mkdir('staticimages', 0755, true); - file_put_contents('staticimages/' . $hash, $image); - $file = File::create(array('hash' => $hash, 'iid' => $item['iid'])); - $item['file'] = $hash; - } + if($request->get('dataImage')) { + $file = File::create(array('data' => $request->get('dataImage'), 'iid' => $item['iid'])); + $item['file'] = $file['hash']; } + return response()->json($item, 201); } @@ -74,19 +66,11 @@ class ItemController extends Controller $item->update(['returned_at' => DB::raw( 'current_timestamp' )]); } - if ($request->get('dataImage')) { - $pos = strpos($request->get('dataImage'), ","); - //$head = substr($request->get('dataImage'), 0, $pos); - $image = base64_decode(substr($request->get('dataImage'), $pos + 1), true); - if ($image) { - $hash = md5(time()); - if (!file_exists('staticimages')) - mkdir('staticimages', 0755, true); - file_put_contents('staticimages/' . $hash, $image); - $file = File::create(array('hash' => $hash, 'iid' => $item['iid'])); - $item['file'] = $hash; - } + if($request->get('dataImage')) { + $file = File::create(array('data' => $request->get('dataImage'), 'iid' => $item['iid'])); + $item['file'] = $file['hash']; } + return response()->json(Item::find($item['uid']), 200); } diff --git a/routes/web.php b/routes/web.php index f07dc3e..5d32e71 100644 --- a/routes/web.php +++ b/routes/web.php @@ -43,7 +43,6 @@ $router->group(['prefix' => '1'], function () use ($router) { $router->get('file/{id}', ['uses' => 'FileController@showOneFile']); $router->post('file', ['uses' => 'FileController@create']); $router->delete('file/{id}', ['uses' => 'FileController@delete']); - $router->put('file/{id}', ['uses' => 'FileController@update']); // items $router->get('{event}/items', ['uses' => 'ItemController@showByEvent']); diff --git a/tests/FileTest.php b/tests/FileTest.php new file mode 100644 index 0000000..0844897 --- /dev/null +++ b/tests/FileTest.php @@ -0,0 +1,63 @@ +1,'data'=>",".base64_encode("foo")]); + + $this->get( '/1/files'); + $this->assertResponseOk(); + $this->assertEquals(1, json_decode($this->response->getContent(),true)[0]['iid']); + $this->assertEquals($item->hash, json_decode($this->response->getContent(),true)[0]['hash']); + $this->assertEquals(32, strlen(json_decode($this->response->getContent(),true)[0]['hash'])); + } + + public function testOneFile(){ + $item = File::create(['iid'=>1,'data'=>",".base64_encode("foo")]); + + $this->get( '/1/file/'.$item->hash); + $this->assertResponseOk(); + $this->assertEquals(1, json_decode($this->response->getContent(),true)['iid']); + $this->assertEquals($item->hash, json_decode($this->response->getContent(),true)['hash']); + $this->assertEquals(32, strlen(json_decode($this->response->getContent(),true)['hash'])); + } + + public function testCreateFile(){ + $event = Event::create(['slug'=>'EVENT', 'name'=>'Event']); + $box = Container::create(['name'=>'BOX']); + Item::create(['cid'=>$box->cid, 'eid' => $event->eid, 'description'=>'1']); + $item = Item::create(['cid'=>$box->cid, 'eid' => $event->eid, 'description'=>'2']); + + $this->post( '/1/file',['data'=>",".base64_encode("foo"), 'iid'=>$item->iid]); + $this->assertResponseStatus(201); + $this->assertEquals($item->iid, json_decode($this->response->getContent(),true)['iid']); + $this->assertEquals(32, strlen(json_decode($this->response->getContent(),true)['hash'])); + } + + public function testDeleteFile(){ + $event = Event::create(['slug'=>'EVENT', 'name'=>'Event']); + $box = Container::create(['name'=>'BOX']); + $item = Item::create(['cid'=>$box->cid, 'eid' => $event->eid, 'description'=>'1']); + File::create(['iid'=>$item->iid,'data'=>",".base64_encode("foo")]); + $file = File::create(['iid'=>$item->iid,'data'=>",".base64_encode("bar")]); + + $this->assertEquals(2, count(File::all())); + + $this->delete( '/1/file/'.$file->hash); + $this->assertResponseOk(); + + $this->assertEquals(1, count(Item::all())); + } + +} diff --git a/tests/ItemTest.php b/tests/ItemTest.php index 7f96829..163462f 100644 --- a/tests/ItemTest.php +++ b/tests/ItemTest.php @@ -25,7 +25,7 @@ class ItemTest extends TestCase { $event = Event::create(['slug'=>'EVENT','name'=>'Event']); $box = Container::create(['name'=>'BOX']); - Item::create(['cid'=>$box->cid, 'eid' => $event->eid, 'wann'=>'', 'wo'=>'','description'=>'1']); + Item::create(['cid'=>$box->cid, 'eid' => $event->eid, 'description'=>'1']); $this->get('/1/EVENT/items'); $response = $this->response->getOriginalContent(); @@ -43,8 +43,8 @@ class ItemTest extends TestCase { $event = Event::create(['slug'=>'EVENT','name'=>'Event']); $box = Container::create(['name'=>'BOX']); - $item = Item::create(['cid'=>$box->cid, 'eid' => $event->eid, 'wann'=>'', 'wo'=>'','description'=>'1']); - File::create(['iid'=>$item->iid, 'hash'=>'filename']); + $item = Item::create(['cid'=>$box->cid, 'eid' => $event->eid, 'description'=>'1']); + $file = File::create(['iid'=>$item->iid, 'data'=>",".base64_encode("foo")]); $this->get('/1/EVENT/items'); $response = $this->response->getOriginalContent(); @@ -55,16 +55,16 @@ class ItemTest extends TestCase $this->assertEquals('1', $response[0]['description']); $this->assertEquals($box->name, $response[0]['box']); $this->assertEquals($box->cid, $response[0]['cid']); - $this->assertEquals('filename', $response[0]['file']); + $this->assertEquals($file->hash, $response[0]['file']); } public function testmultiMembers() { $event = Event::create(['slug'=>'EVENT','name'=>'Event']); $box = Container::create(['name'=>'BOX']); - Item::create(['cid'=>$box->cid, 'eid' => $event->eid, 'wann'=>'', 'wo'=>'','description'=>'1']); - Item::create(['cid'=>$box->cid, 'eid' => $event->eid, 'wann'=>'', 'wo'=>'','description'=>'2']); - Item::create(['cid'=>$box->cid, 'eid' => $event->eid, 'wann'=>'', 'wo'=>'','description'=>'3']); + Item::create(['cid'=>$box->cid, 'eid' => $event->eid, 'description'=>'1']); + Item::create(['cid'=>$box->cid, 'eid' => $event->eid, 'description'=>'2']); + Item::create(['cid'=>$box->cid, 'eid' => $event->eid, 'description'=>'3']); $this->get('/1/EVENT/items'); $response = $this->response->getOriginalContent(); @@ -110,7 +110,7 @@ class ItemTest extends TestCase $event = Event::create(['slug'=>'EVENT','name'=>'Event']); $box = Container::create(['name'=>'BOX']); - $item = Item::create(['cid'=>$box->cid, 'eid' => $event->eid, 'wann'=>'', 'wo'=>'','description'=>'1']); + $item = Item::create(['cid'=>$box->cid, 'eid' => $event->eid, 'description'=>'1']); $this->assertEquals(1, $item['uid']); $this->assertEquals('1', $item['description']); @@ -138,8 +138,8 @@ class ItemTest extends TestCase public function testDeleteItem(){ $event = Event::create(['slug'=>'EVENT','name'=>'Event']); $box = Container::create(['name'=>'BOX']); - $item = Item::create(['cid'=>$box->cid, 'eid' => $event->eid, 'wann'=>'', 'wo'=>'','description'=>'1']); - Item::create(['cid'=>$box->cid, 'eid' => $event->eid, 'wann'=>'', 'wo'=>'','description'=>'2']); + $item = Item::create(['cid'=>$box->cid, 'eid' => $event->eid, 'description'=>'1']); + Item::create(['cid'=>$box->cid, 'eid' => $event->eid, 'description'=>'2']); $this->assertEquals(2, count(Item::all())); @@ -153,8 +153,8 @@ class ItemTest extends TestCase $event = Event::create(['slug'=>'EVENT','name'=>'Event']); $box = Container::create(['name'=>'BOX']); - Item::create(['cid'=>$box->cid, 'eid' => $event->eid, 'wann'=>'', 'wo'=>'','description'=>'1']); - $item2 = Item::create(['cid'=>$box->cid, 'eid' => $event->eid, 'wann'=>'', 'wo'=>'','description'=>'2']); + Item::create(['cid'=>$box->cid, 'eid' => $event->eid, 'description'=>'1']); + $item2 = Item::create(['cid'=>$box->cid, 'eid' => $event->eid, 'description'=>'2']); $this->assertEquals(2, count(Item::all())); @@ -163,7 +163,7 @@ class ItemTest extends TestCase $this->assertResponseOk(); $this->assertEquals(1, count(Item::all())); - $item3 = Item::create(['cid'=>$box->cid, 'eid' => $event->eid, 'wann'=>'', 'wo'=>'','description'=>'3']); + $item3 = Item::create(['cid'=>$box->cid, 'eid' => $event->eid, 'description'=>'3']); $this->assertEquals(3, $item3['uid']); $this->assertEquals(2, count(Item::all()));