Ranx99

Ranx99

Member Since 1 Year Ago

Experience Points 1,610
Experience
Level
Lessons Completed 1
Lessons
Completed
Best Reply Awards 0
Best Answer
Awards
  • Start Your Engines Achievement

    Start Your Engines

    Earned once you have completed your first Laracasts lesson.

  • First Thousand Achievement

    First Thousand

    Earned once you have earned your first 1000 experience points.

  • One Year Member Achievement

    One Year Member

    Earned when you have been with Laracasts for 1 year.

  • Two Year Member Achievement

    Two Year Member

    Earned when you have been with Laracasts for 2 years.

  • Three Year Member Achievement

    Three Year Member

    Earned when you have been with Laracasts for 3 years.

  • Four Year Member Achievement

    Four Year Member

    Earned when you have been with Laracasts for 4 years.

  • Five Year Member Achievement

    Five Year Member

    Earned when you have been with Laracasts for 5 years.

  • School In Session Achievement

    School In Session

    Earned when at least one Laracasts series has been fully completed.

  • Welcome To The Community Achievement

    Welcome To The Community

    Earned after your first post on the Laracasts forum.

  • Full Time Learner Achievement

    Full Time Learner

    Earned once 100 Laracasts lessons have been completed.

  • Pay It Forward Achievement

    Pay It Forward

    Earned once you receive your first "Best Reply" award on the Laracasts forum.

  • Subscriber Achievement

    Subscriber

    Earned if you are a paying Laracasts subscriber.

  • Lifer Achievement

    Lifer

    Earned if you have a lifetime subscription to Laracasts.

  • Laracasts Evangelist Achievement

    Laracasts Evangelist

    Earned if you share a link to Laracasts on social media. Please email [email protected] with your username and post URL to be awarded this badge.

  • Chatty Cathy Achievement

    Chatty Cathy

    Earned once you have achieved 500 forum replies.

  • Laracasts Veteran Achievement

    Laracasts Veteran

    Earned once your experience points passes 100,000.

  • Ten Thousand Strong Achievement

    Ten Thousand Strong

    Earned once your experience points hits 10,000.

  • Laracasts Master Achievement

    Laracasts Master

    Earned once 1000 Laracasts lessons have been completed.

  • Laracasts Tutor Achievement

    Laracasts Tutor

    Earned once your "Best Reply" award count is 100 or more.

  • Laracasts Sensei Achievement

    Laracasts Sensei

    Earned once your experience points passes 1 million.

  • Top 50 Achievement

    Top 50

    Earned once your experience points ranks in the top 50 of all Laracasts users.

12 Oct
1 month ago

Ranx99 left a reply on Understanding Laravel Horizon's Processes And Queue Settings!

@D9705996

If I have a website and I want to send a verification email to a registered user's email ( via mailgun for example ). How can I tell what is the number of processes that is good for such a job?

11 Oct
1 month ago

Ranx99 started a new conversation Understanding Laravel Horizon's Processes And Queue Settings!

In Laravel Horizon's settings:

'local' => [
    'supervisor-1' => [
        'connection' => 'redis',
        'queue' => ['default'],
        'balance' => 'simple',
        'processes' => 3,
        'tries' => 3,
    ],
],
  • How can I determine the number of processes I should use in processes setting?
  • Is there a limit number of processes?
  • In the queue setting, as I understand this setting is for separating my queues ( Ex: uploadImageQueue, verfyEmailQueue, etc.. ) is this the right? is there a limit for the number of queues I can set?
10 Oct
1 month ago

Ranx99 started a new conversation How To Send An Email Verification For A Created User?

Lets say I am logged in as an Admin inside the admin panel: and I want to:

  1. Create a random user via admin panel.
  2. Send an email verification to that created user's email.

How to accomplish this?

11 Sep
2 months ago

Ranx99 left a reply on Admin Dashboard As SPA!

Thank you,

"It's not exactly an SPA"

I think Laravel Nova is a single-page app as I understand...

10 Sep
2 months ago

Ranx99 started a new conversation Admin Dashboard As SPA!

I am thinking of building the admin dashboard as single-page app with ( vue + vue router ). I haven't built SPA app yet, so this will be my first.

  • Is it good idea to build the admin dashboard as SPA? Did anyone tried it?
  • What is SPA's advantages Vs the classic way (MPA) in this case?

I want your inputs on the subject...

29 Aug
2 months ago

Ranx99 started a new conversation Laravel App Hosting

I am looking for a managed hosting for laravel app to setup LEMP fast..

I don't have time to watch over the server to deal with security and check for problems that it might have..

I was thinking going ( DigitalOcean + Forge ) but I will still have to monitor it..

25 Aug
2 months ago

Ranx99 left a reply on Where To Store External API Rate Limit Values?

Store API responses locally, especially if you expect a lot of traffic. In general, don’t call the API on every page load. Instead, call the API independently and load from cache on each page load.

Yes, this will be helpful if I use GET requests, but I am using POST ( upload a video file ) and Delete ( a video file ).

in Laravel docs it says:

If you are using the Memcached driver, items that are stored "forever" may be removed when the cache reaches its size limit. https://laravel.com/docs/5.6/cache

Doesn't this apply on redis also?

24 Aug
2 months ago

Ranx99 left a reply on Where To Store External API Rate Limit Values?

@Snapey

The reason why I want to store how many ( requests left ) is because I am using Vimeo's API ( which will block my app, if I exceeded the limit repeatedly - It will not just send back an error ) so I need to store these information somewhere...

Is it reliable to store these info in redis cache? and use cache::forever

Ranx99 started a new conversation Where To Store External API Rate Limit Values?

For example: Github, Twitter and Vimeo uses API rate limiting and will return ( in the response's headers ) something like this:

  • X-RateLimit-Limit
  • X-RateLimit-Remaining
  • X-RateLimit-Reset

For now, I am dealing with Vimeo's API and it will allow ( 500 request per 15 minutes ) and I was thinking of doing it like this:

  1. Prepare to send request to Vimeo's API.
  2. Check if ( X-RateLimit-Remaining ) value is > 0 ( in database ) or return error.
  3. Send request.
  4. Get the ( X-RateLimit-Remaining ) from this request response's header and replace it with the current one ( in database ).
  5. Reset ( X-RateLimit-Remaining ) value to 500 every 15 minutes.

Should I uses the database to store these values ? or using something like radis cache to store them ( I don't know if radis will cache these values forever or what happens to these values if the cache size reaches its limit ? or is there a better way?

02 Aug
3 months ago

Ranx99 left a reply on How To Use API Rate Limit For Any Authenticated Users?

I was thinking of something like this:

Route::group(['prefix' => 'auth:api', 'middleware' => 'throttle:500,15'], function () {
    Route::get('users/rate/limit', 'RateLimitControllr');
});

Does this effect all users or per-user ?

Ranx99 started a new conversation How To Use API Rate Limit For Any Authenticated Users?

For example: An API route that I want to allow 500 requests ( from any logged in user ) per 15 minutes

logged in user A requests the API => 499 remained logged in user B requests the API => 498 remained

*API rate-limit will be reset after 15 minutes

How to do something like this?

29 Jul
3 months ago

Ranx99 left a reply on Video Hosting And Streaming Solutions!

@jlrdw

I like Vimeo, but since I will allow users to upload their videos and Vimeo uses an API rate limit , doesn't that mean my app will get blocked if it exceeded that limit ?

27 Jul
3 months ago

Ranx99 started a new conversation Video Hosting And Streaming Solutions!

For an e-learning website project , what is the best service for video hosting and streaming? And since I want only allowed users who took some course to watch or download course's videos, I see these options:

  • S3 > Elastic Transcoder > Cloudfront ( Signed URLs)
  • Vimeo ( Private Link )
  • Wistia ( I don't know about it much )

I was wondering, which one is the cheapest service? is there a better one out there? I want your opinions and experiences in what is the best way to go..

21 Jul
3 months ago

Ranx99 left a reply on Vimeo For Business

@garethdaine

I have the same question, what did you end up with using?

20 Jul
3 months ago

Ranx99 left a reply on Error While Trying To Update Multiple Has Many Relation!

@staudenmeir

class Page extends Model
{
    public function sections()
    {
        return $this->hasMany('App\Models\Section');
    }
}

class Section extends Model
{
    public function page()
    {
        return $this->belongsTo('App\Models\Page');
    }
    
    public function requirements()
    {
        return $this->hasMany('App\Models\Requirement');
    }
}

class Requirement extends Model
{   
    public function section()
    {
        return  $this->belongsTo('App\Models\Section');
    }
}
19 Jul
3 months ago

Ranx99 left a reply on Error While Trying To Update Multiple Has Many Relation!

I was also thinking maybe something like this would work, but it doesn't :( why is that ?

$page->with(['sections.requirements' => function ($query) {
            $query->whereIn('id', $ids_array)
            ->orderByRaw("FIELD(id, {$ids_string})")
            ->update([
               'sortOrder' => DB::raw('@rownum  := @rownum  + 1'),
            ]);
        }]);
18 Jul
3 months ago

Ranx99 started a new conversation Error While Trying To Update Multiple Has Many Relation!

Iam trying to update 'sortOrder' column based on a given list of ids. For example, if the given IDs are:

$orderList = ['id' =>'1','id' =>'5','id' =>'3']
ID of '1' => 'sortOrder column'  = 1
ID of '5' => 'sortOrder column'  = 2
ID of '3' => 'sortOrder column'  = 3

I have these models:

  • Model Page = has one to many relation with sections (Page-> has many sections)
  • Model Section = has one to many relation with requirements (Section-> has many requirements)

Query statement:

 $ids_array = array_pluck($orderList, 'id');
 $ids_string = implode(',', $ids_array);

 DB::statement(DB::raw('set @rownum=0'));
 
 $result = $page->sections()->requirements()->whereIn('id', $ids_array)
                  ->orderByRaw("FIELD(id, {$ids_string})")
                  ->update([
                     'sortOrder' => DB::raw('@rownum  := @rownum  + 1'),
                  ]);

I want to get all the sections and requirements and only update the requirements in the given IDs.

But when I try to update using this query, I am getting an error:

"Method Illuminate\Database\Query\Builder::requirements does not exist."

Ranx99 left a reply on Update Different Rows With Different Values In One Query!

OK I have done it , In tow ways..

  • 1 ( this one is what I was looking for ) : thanks to @Tray2
$ids_array = array_pluck($commentsOderdListData, 'id');
$ids_strings = implode(',', $ids_array);

DB::statement(DB::raw('set @rownum=0'));

$result = $post->comments()->whereIn('id', $ids_array)
->orderByRaw( DB::raw("FIELD(id, $ids_strings)") )
->update([
    'sortOrder' => DB::raw('@rownum  := @rownum  + 1')
]);
  • 2 ( which uses CASE Function) => set different rows with different values
$postID = 3;
$cases = [];
$ids = [];
$params = [];

foreach ($commentsOderdListDataas $index => $array) {
    $id = (int) $array['id'];
    $cases[] = "WHEN `id` = {$id} then ?";
    $params[] = $index;
    $ids[] = $id;
}

//array to string
$ids = implode(',', $ids);

//add a space between each case
$cases = implode(' ', $cases);

return DB::statement("UPDATE `comments` SET `sortOrder` = (CASE {$cases} END) WHERE `post_id` = {$postID} AND `id` IN ({$ids})", $params);

17 Jul
3 months ago

Ranx99 started a new conversation Update Different Rows With Different Values In One Query!

Update different rows with different values in one query!

Some example:

$commentsOderdListData = [
  ['id'=>1,'sortOrder'=> 0],
  ['id'=>2,'sortOrder'=> 2],
  ['id'=>3,'sortOrder'=> 1],
  ['id'=>4,'sortOrder'=> 3]
];

I know maybe something like this will work:

$postID = 2;
$post =  $this->model->where('id',  $postID )->firstOrFail();

foreach($commentsOderdListData as $data){
   $post->comments()->where('id'=>$data['id'])->update(['sortOrder'=> $data['sortOrder']]);
}
  • Is there a way to just update this data in one query, for best performance ?
12 Jul
4 months ago

Ranx99 left a reply on Update, Create And Delete HasMany() Relations In One Go

was looking for a way to do that, thanks @davestewart

11 Jul
4 months ago

Ranx99 left a reply on Get Model's Relation By Name ?

@lostdreamer_nl

thank you for the info! really helpful!

Ranx99 started a new conversation Get Model's Relation By Name ?

Is there a way to call a relation by its name , Iam looking for somthing like:

$relation = 'comments';
$user->getRelation($relation )->create([]);

I have tried this, but I am getting :

"Undefined index: comments"
09 Jul
4 months ago

Ranx99 left a reply on How To Store An Array Of Strings Into One Database Field?

Yes, I was trying to find a laravel's way to store an array like that.. still looking!

08 Jul
4 months ago

Ranx99 left a reply on How To Store An Array Of Strings Into One Database Field?

@jlrdw

yes, so I guess it would be something like this: main table (let's call it posts table):

title
status
slug
requirements (text field) removed into a spreate table
specifications (text field) removed into a spreate table
info (text field) removed into a spreate table

requirements_posts table:

id
post_id
body_info

specifications_posts table:

id
post_id
body_info

info_posts table:

id
post_id
body_info

but doesn't this seems an overkill ?

Ranx99 left a reply on How To Store An Array Of Strings Into One Database Field?

@jlrdw

Yeah I was thinking of that ( I just updated my question ) , but since I have 3 different text fields inside that table which all have the same behavior .. is it really good to separate these 3 fields into 3 separate tables, and make a foreign key between main table and each of these tables ?

Ranx99 started a new conversation How To Store An Array Of Strings Into One Database Field?

Let's say I have an array:

$requirements  =  ['requirement1 bla bla',  'requirement2 bla bla',  'requirement3 bla bla'];

And I have a requirements field in database's table which is a Text data type field

What is the best way to store this array into this field and when I try to retrieve the data I will be able to do this:

requirements are: 1 - requirement1 bla bla 2 - requirement2 bla bla etc..

29 Jun
4 months ago

Ranx99 left a reply on Is Method Injection A Bad Practice?

@bobbybouwmann

Great! Thank you for your time and help.

Ranx99 left a reply on Is Method Injection A Bad Practice?

@bobbybouwmann

Yeah, I think I can apply it when I feel like the controller is getting heavy!

In the meantime, I found a cool way to call these action classes:

  • CallActions trait
namespace App\Library\Traits;

use App\Library\Core\ActionCaller;
use Illuminate\Container\Container;

trait CallActions
{
    public function execute($action, $data = null)
    {
        return Container::getInstance()->make(ActionCaller::class)->trigger($action, $data);
    }
}
  • Add CallActions trait to be used by all controlers
namespace App\Http\Controllers;

use App\Library\Traits\CallActions;
use Illuminate\Foundation\Bus\DispatchesJobs;
use Illuminate\Routing\Controller as BaseController;
use Illuminate\Foundation\Validation\ValidatesRequests;
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;

class Controller extends BaseController
{
   use AuthorizesRequests, DispatchesJobs, ValidatesRequests, CallActions;
}
  • ActionCaller
namespace App\Library\Core;

use Illuminate\Contracts\Container\Container;

class ActionCaller
{
    private $container;

    public function __construct(Container $container)
    {
        $this->container = $container;
    }

    public function trigger($action, $data)
    {
        return $this->container->call($action, ['data' => $data], 'execute');
    }
}

  • Will be used like this
public function store(ArticleStoreRequest $request)
{
    $article= $this->execute(ArticleStoreAction::class, $request->validated());

    if ($article) {
        return redirect()->route('admin.permissions.edit', $permission->id);
    } else {
        return back();
    }
}
28 Jun
4 months ago

Ranx99 left a reply on Is Method Injection A Bad Practice?

@bobbybouwmann

Thanks you, Really interesting article .. so the author has replaced all controllers with a "single action controllers". But, doesn't that mean I will have many controllers files ?

So in case I have a crud ArticleController I would do something like

  • ArticleGetController
  • ArticlePostController
  • ArticleUpdateController
  • ArticleDestroyController

Ranx99 started a new conversation Is Method Injection A Bad Practice?

Let's say I have these classes which will only have one method ( 'execute' ):

  • CreateAction
  • EditAction

Action classes will be used by all controllers to do the business logic and return some data to be used by the response, and I want to call these classes inside controller's methods by using Automatic Injection.

namespace App\Http\Controllers;

use App\Http\Controllers\Controller;
use App\Http\Requests\Posts\StoreRequest;
use App\Action\Posts\EditAction;
use App\Action\Posts\CreateAction;

class PostController extends Controller
{
    public function index()
    {
        return view('posts.index');
    }

    public function create()
    {
        return view('posts.create');
    }

    public function store(StoreRequest $request, CreateAction $action)
    {
        $post = $action->execute($request->validated());

        return redirect()->route('posts.edit', $post->id);
    }

    public function edit($id, EditAction $action)
    {
        $post =  $action->execute($id);

        return view('posts.edit', compact('post'));
    }
}

Example for EditAction :

namespace App\Actions\Posts;

use App\Models\Post;

class EditAction
{
    private $post;

    public function __construct(Post $post)
    {
        $this->model = $post;
    }

    public function execute($id)
    {
        return $this->model->where('id', $id)->firstOrFail();
    }
}
  • Is using Automatic Injection a bad practice ?
  • Is there a better way for calling these action classes ?
24 Jun
4 months ago

Ranx99 left a reply on Some Questions About ADR Pattren!

I guess not many developers using this pattern !?

23 Jun
4 months ago

Ranx99 started a new conversation Some Questions About ADR Pattren!

I have read this: https://github.com/pmjones/adr

I understand the point of Actions and the Domain but:

  • Why should the Responder be separated to a new class? why just don't just do it inside the Action like this:
public function __invoke(Request $request)
{
    $data = $this->postService->getPost($request->get('id'));

    return view('post.show', compact('data'));
}
  • Has anyone tried to use this pattern in his projects? If so, what do you think about it?
14 May
6 months ago

Ranx99 left a reply on Homestead: "ETXTBSY: Text File Is Busy"

Iam not opening any shared file on the host OS,.

npm install --no-bin-links

tried this and it gave me the same errors...

it seems to work for me when I downgrade the npm for now.

13 May
6 months ago

Ranx99 started a new conversation Homestead: "ETXTBSY: Text File Is Busy"

Iam doing a fresh laravel project install with latest versions of:

  • lalravel homestead box (v6.0.0)
  • vagrant (2.1.1)

Iam using "windows 10" as Host.

now when I do "npm install" to install the dependencies, I get many errors :

npm WARN rollback Rolling back [email protected] failed (this is probably harmless): ETXTBSY: text file is busy, unlink '/home/vagrant/code/site1/node_modules/abbrev/package.json.1705314388'
npm WARN rollback Rolling back [email protected] failed (this is probably harmless): ETXTBSY: text file is busy, unlink '/home/vagrant/code/site1/node_modules/acorn/package.json.1138498880'
npm WARN rollback Rolling back [email protected] failed (this is probably harmless): ETXTBSY: text file is busy, unlink '/home/vagrant/code/site1/node_modules/ajv-keywords/package.json.1663198334'
npm WARN rollback Rolling back [email protected] failed (this is probably harmless): ETXTBSY: text file is busy, unlink '/home/vagrant/code/site1/node_modules/acorn-dynamic-import/node_modules/acorn/package.json.1356440482'
npm WARN rollback Rolling back [email protected] failed (this is probably harmless): ETXTBSY: text file is busy, unlink '/home/vagrant/code/site1/node_modules/acorn-dynamic-import/package.json.2699619638'
npm WARN rollback Rolling back [email protected] failed (this is probably harmless): ETXTBSY: text file is busy, unlink '/home/vagrant/code/site1/node_modules/alphanum-sort/package.json.548391976'
npm WARN rollback Rolling back [email protected] failed (this is probably harmless): ETXTBSY: text file is busy, unlink '/home/vagrant/code/site1/node_modules/adjust-sourcemap-loader/node_modules/camelcase/package.json.2204453570'
npm WARN rollback Rolling back [email protected] failed (this is probably harmless): ETXTBSY: text file is busy, unlink '/home/vagrant/code/site1/node_modules/amdefine/package.json.3206824631'
npm WARN rollback Rolling back [email protected] failed (this is probably harmless): ETXTBSY: text file is busy, unlink '/home/vagrant/code/site1/node_modules/ansi-html/package.json.158893468'
npm WARN rollback Rolling back [email protected] failed (this is probably harmless): ETXTBSY: text file is busy, unlink '/home/vagrant/code/site1/node_modules/ansi-wrap/package.json.3041354002'
npm WARN rollback Rolling back [email protected] failed (this is probably harmless): ETXTBSY: text file is busy, unlink '/home/vagrant/code/site1/node_modules/ansi-gray/package.json.2281624877'
npm WARN rollback Rolling back [email protected] failed (this is probably harmless): ETXTBSY: text file is busy, unlink '/home/vagrant/code/site1/node_modules/ansi-regex/package.json.212328612'
npm WARN rollback Rolling back [email protected] failed (this is probably harmless): ETXTBSY: text file is busy, unlink '/home/vagrant/code/site1/node_modules/aproba/package.json.1062736441'
npm WARN rollback Rolling back [email protected] failed (this is probably harmless): ETXTBSY: text file is busy, unlink '/home/vagrant/code/site1/node_modules/archive-type/package.json.970322693'
npm WARN rollback Rolling back [email protected] failed (this is probably harmless): ETXTBSY: text file is busy, unlink '/home/vagrant/code/site1/node_modules/arr-diff/package.json.3131142389'
npm WARN rollback Rolling back [email protected] failed (this is probably harmless): ETXTBSY: text file is busy, unlink '/home/vagrant/code/site1/node_modules/archive-type/node_modules/file-type/package.json.2364150964'
npm WARN rollback Rolling back [email protected] failed (this is probably harmless): ETXTBSY: text file is busy, unlink '/home/vagrant/code/site1/node_modules/arr-flatten/package.json.827426214'
npm WARN rollback Rolling back [email protected] failed (this is probably harmless): ETXTBSY: text file is busy, unlink '/home/vagrant/code/site1/node_modules/arr-union/package.json.1072950859'
npm WARN rollback Rolling back [email protected] failed (this is probably harmless): ETXTBSY: text file is busy, unlink '/home/vagrant/code/site1/node_modules/array-differ/package.json.970724807'
npm WARN rollback Rolling back [email protected] failed (this is probably harmless): ETXTBSY: text file is busy, unlink '/home/vagrant/code/site1/node_modules/array-flatten/package.json.2479398186'
npm WARN rollback Rolling back [email protected] failed (this is probably harmless): ETXTBSY: text file is busy, unlink '/home/vagrant/code/site1/node_modules/array-find-index/package.json.2102662261'
npm WARN rollback Rolling back [email protected] failed (this is probably harmless): ETXTBSY: text file is busy, unlink '/home/vagrant/code/site1/node_modules/array-uniq/package.json.3261859398'
npm WARN rollback Rolling back [email protected] failed (this is probably harmless): ETXTBSY: text file is busy, unlink '/home/vagrant/code/site1/node_modules/array-union/package.json.973410432'
npm WARN rollback Rolling back [email protected] failed (this is probably harmless): ETXTBSY: text file is busy, unlink '/home/vagrant/code/site1/node_modules/asn1/package.json.3390038911'
npm WARN rollback Rolling back [email protected] failed (this is probably harmless): ETXTBSY: text file is busy, unlink '/home/vagrant/code/site1/node_modules/assert-plus/package.json.626536117'
npm WARN rollback Rolling back [email protected] failed (this is probably harmless): ETXTBSY: text file is busy, unlink '/home/vagrant/code/site1/node_modules/array-unique/package.json.367793859'
npm WARN rollback Rolling back [email protected] failed (this is probably harmless): ETXTBSY: text file is busy, unlink '/home/vagrant/code/site1/node_modules/assign-symbols/package.json.3997474815'
npm WARN rollback Rolling back [email protected] failed (this is probably harmless): ETXTBSY: text file is busy, unlink '/home/vagrant/code/site1/node_modules/async-each/package.json.2150029441'
npm WARN rollback Rolling back [email protected] failed (this is probably harmless): ETXTBSY: text file is busy, unlink '/home/vagrant/code/site1/node_modules/ast-types/package.json.1509703659'
npm WARN rollback Rolling back [email protected] failed (this is probably harmless): ETXTBSY: text file is busy, unlink '/home/vagrant/code/site1/node_modules/async-each-series/package.json.1231243004'
npm WARN rollback Rolling back [email protected] failed (this is probably harmless): ETXTBSY: text file is busy, unlink '/home/vagrant/code/site1/node_modules/async-foreach/package.json.165440910'
npm WARN rollback Rolling back [email protected] failed (this is probably harmless): ETXTBSY: text file is busy, unlink '/home/vagrant/code/site1/node_modules/atob/package.json.2465016514'
npm WARN rollback Rolling back [email protected] failed (this is probably harmless): ETXTBSY: text file is busy, unlink '/home/vagrant/code/site1/node_modules/asynckit/package.json.2102742188'
npm WARN rollback Rolling back [email protected] failed (this is probably harmless): ETXTBSY: text file is busy, unlink '/home/vagrant/code/site1/node_modules/aws-sign2/package.json.1582875451'
npm WARN rollback Rolling back [email protected] failed (this is probably harmless): ETXTBSY: text file is busy, unlink '/home/vagrant/code/site1/node_modules/aws4/package.json.3284052633'
npm WARN rollback Rolling back [email protected] failed (this is probably harmless): ETXTBSY: text file is busy, unlink '/home/vagrant/code/site1/node_modules/babel-core/node_modules/source-map/package.json.602266737'
npm WARN rollback Rolling back [email protected] failed (this is probably harmless): ETXTBSY: text file is busy, unlink '/home/vagrant/code/site1/node_modules/babel-code-frame/node_modules/ansi-styles/package.json.2393111773'
npm WARN rollback Rolling back [email protected] failed (this is probably harmless): ETXTBSY: text file is busy, unlink '/home/vagrant/code/site1/node_modules/babel-generator/node_modules/source-map/package.json.52151904'
npm WARN rollback Rolling back [email protected] failed (this is probably harmless): ETXTBSY: text file is busy, unlink '/home/vagrant/code/site1/node_modules/babel-code-frame/node_modules/supports-color/package.json.3230894599'
npm WARN rollback Rolling back [email protected] failed (this is probably harmless): ETXTBSY: text file is busy, unlink '/home/vagrant/code/site1/node_modules/babel-plugin-syntax-async-functions/package.json.579433913'
npm WARN rollback Rolling back [email protected] failed (this is probably harmless): ETXTBSY: text file is busy, unlink '/home/vagrant/code/site1/node_modules/babel-plugin-syntax-exponentiation-operator/package.json.3383012636'
npm WARN rollback Rolling back [email protected] failed (this is probably harmless): ETXTBSY: text file is busy, unlink '/home/vagrant/code/site1/node_modules/babel-plugin-syntax-object-rest-spread/package.json.1039671854'
npm WARN rollback Rolling back [email protected] failed (this is probably harmless): ETXTBSY: text file is busy, unlink '/home/vagrant/code/site1/node_modules/babel-plugin-syntax-trailing-function-commas/package.json.2830802730'
npm WARN rollback Rolling back [email protected] failed (this is probably harmless): ETXTBSY: text file is busy, unlink '/home/vagrant/code/site1/node_modules/babylon/package.json.3244942865'
npm WARN rollback Rolling back [email protected] failed (this is probably harmless): ETXTBSY: text file is busy, unlink '/home/vagrant/code/site1/node_modules/balanced-match/package.json.3865753112'
npm WARN rollback Rolling back [email protected] failed (this is probably harmless): ETXTBSY: text file is busy, unlink '/home/vagrant/code/site1/node_modules/base64-js/package.json.2189141935'
npm WARN rollback Rolling back [email protected] failed (this is probably harmless): ETXTBSY: text file is busy, unlink '/home/vagrant/code/site1/node_modules/batch/package.json.1015925448'
npm WARN rollback Rolling back [email protected] failed (this is probably harmless): ETXTBSY: text file is busy, unlink '/home/vagrant/code/site1/node_modules/big.js/package.json.1320199066'
npm WARN rollback Rolling back [email protected] failed (this is probably harmless): ETXTBSY: text file is busy, unlink '/home/vagrant/code/site1/node_modules/beeper/package.json.2703642682'
npm WARN rollback Rolling back [email protected] failed (this is probably harmless): ETXTBSY: text file is busy, unlink '/home/vagrant/code/site1/node_modules/babel-code-frame/node_modules/supports-color/package.json.3230894599'
npm WARN rollback Rolling back [email protected] failed (this is probably harmless): ETXTBSY: text file is busy, unlink '/home/vagrant/code/site1/node_modules/babel-generator/node_modules/source-map/package.json.52151904'
npm WARN rollback Rolling back [email protected] failed (this is probably harmless): ETXTBSY: text file is busy, unlink '/home/vagrant/code/site1/node_modules/babel-core/node_modules/source-map/package.json.602266737'
npm WARN rollback Rolling back [email protected] failed (this is probably harmless): ETXTBSY: text file is busy, unlink '/home/vagrant/code/site1/node_modules/adjust-sourcemap-loader/node_modules/camelcase/package.json.2204453570'
npm WARN rollback Rolling back [email protected] failed (this is probably harmless): ETXTBSY: text file is busy, unlink '/home/vagrant/code/site1/node_modules/bin-build/node_modules/uuid/package.json.1347906736'
npm WARN [email protected] requires a peer of [email protected]^6.0.0 but none is installed. You must install peer dependencies yourself.

npm ERR! path /home/vagrant/code/site1/node_modules/alphanum-sort/package.json.548391976
npm ERR! code ETXTBSY
npm ERR! errno -26
npm ERR! syscall rename
npm ERR! ETXTBSY: text file is busy, rename '/home/vagrant/code/site1/node_modules/alphanum-sort/package.json.548391976' -> '/home/vagrant/code/site1/node_modules/alphanum-sort/package.json'

npm ERR! A complete log of this run can be found in:
npm ERR!     /home/vagrant/.npm/_logs/2018-05-13T08_28_36_234Z-debug.log

Anyone else facing this ?

Ranx99 left a reply on Homestead Npm Install --no-bin-links Error

Same issue for me too! (windows as host)

  • adding (--no-bin-links) didnt work.
  • open cmd as admin didnt work.

Iam runing npm v6.0.0...

any one found out a way to solve this ?

15 Mar
7 months ago

Ranx99 left a reply on Solutions For Uploading Large Files ?

I just found a package that does all this, created by @kfirba, which will generate a signature to be used for Fineuploader and many more.. its really useful.

14 Mar
8 months ago

Ranx99 left a reply on Solutions For Uploading Large Files ?

@Snapey thank you. I have checked the blog's post real fast and it seems It has what Iam looking for..

gonna play with it tonight and maybe trying to create a package for who wants to use fineuploader like me.

Iam wondering how does Laravel generate a signature when using the integrated s3 storage ?

Ranx99 left a reply on Solutions For Uploading Large Files ?

Yes, "Fineuploader" has this feature which will upload files without passing it to your server then s3. so It will be direct to s3.

https://docs.fineuploader.com/endpoint_handlers/amazon-s3.html

but In order to do so . I need to generate a signature for using s3 service directly .. which where Iam stuck with ..

I have checked "vue-s3-dropzone" but It doesn't provide the features I want as "Fineuploader" does.

12 Mar
8 months ago

Ranx99 started a new conversation Solutions For Uploading Large Files ?

In the past few days I was trying to find a nice way to handle this, and came a cross:

"fineuploader" https://fineuploader.com

which can be used to upload these kind of files ( large files: 1GB something ) directly to s3 .. and I think this is the way to go for .. but Iam stuck on how to do this along with "Vue" and "Laravel" ... if there is some examples on how to handle this or what steps to follow .. i would appreciate it..

26 Jan
9 months ago

Ranx99 left a reply on Single Login System For Mobile And Web App !?

I think I need to just separate the login and just add CreateFreshApiToken for web guard and that's it ??

As for mobile I should return json ( access token and refresh token to be used in each request ) ..

Does this seems right ?

Ranx99 left a reply on Single Login System For Mobile And Web App !?

so, I dont need to store access token and refresh token" for any next API requests into a session .. that will be handled by CreateFreshApiToken !?

25 Jan
9 months ago

Ranx99 started a new conversation Single Login System For Mobile And Web App !?

Can I use API and Passport for single login system for web app ( MPA ) and mobile native app ?

  • As for WebControllers guarded by "web" I will store the "access token and refresh token" for any next API requests ( I want to consume the same API that is used by the mobile app) and user info would also be stored into a session ..

  • As for ApiControllers guarded by "api" it will just return access token to be used by the mobile native app for any next API requests ..

Can this be possible? Is this workflow is right ? and what is CreateFreshApiToken middleware role in here ?

23 Jan
9 months ago

Ranx99 started a new conversation API Consumed By Web And Mobile Apps !?

I am confused how can this be possible ...

what I have for now is:

web.php

Route::group(['namespace'  => 'WebControllers\Front',], function () {
    Route::get('/', '[email protected]')->name('index');
});

api.php

Route::group(['prefix' => 'v1', 'namespace'  => 'ApiControllers\Front'],function(){
    Route::post('register', '[email protected]')->name('register');
    Route::post('login', '[email protected]')->name('login');
});

AuthController.php

namespace App\Http\Controllers\ApiControllers\Front;

use App\Http\Requests\Auth\RegisterRequest;
use App\Http\Requests\Auth\LoginRequest;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Validator;
use App\Services\Api\Front\AuthService;


class AuthController extends Controller
{
    private $authService;

    public function __construct(AuthService $authService) {
        $this->middleware('guest');
        $this->authService = $authService;
    }

    public function login(LoginRequest $request)
    {
        return $this->authService->login($request);
    }

    public function register(RegisterRequest $request)
    {
        return $this->authService->register($request);
    }
}

LoginRequest.php

namespace App\Http\Requests\Auth;

use Illuminate\Foundation\Http\FormRequest;

class LoginRequest extends FormRequest
{
    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize()
    {
        return true;
    }

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    {
        return [
            'email' => 'required|string|email|max:255',
            'password' => 'required|string|min:6',
        ];
    }
}

authService.php

namespace App\Services\Api\Front;

use Illuminate\Support\Facades\Auth;
use App\Models\User;
use GuzzleHttp\Client;
use App\Exceptions\InvalidCredentialsException;
use Illuminate\Support\Facades\Cookie;

class AuthService
{
    const REFRESH_TOKEN = 'refreshToken';

    public function register($requestData)
    {
        $data = $requestData->all();
        $data['password'] = bcrypt($data['password']);
        $user = User::create($data);
        return response()->json([
            'data' => [
                'message' => 'Register success!'
            ],
        ]);
    }

    public function login($requestData)
    {
        return $this->attemptLogin($requestData['email'], $requestData['password']);
    }

    /**
     * Attempt to create an access token using user credentials
     *
     * @param string $email
     * @param string $password
     */
    public function attemptLogin($email, $password)
    {
        $user = User::where('email', $email)->firstOrFail();

        if (!is_null($user)) {
            return $this->loginProxy('password', [
                'username' => $email,
                'password' => $password
            ]);
        }
    }

    /**
     * Proxy a request to the OAuth server.
     *
     * @param string $grantType what type of grant type should be proxied
     * @param array $data the data to send to the server
     */
    public function loginProxy($grantType, array $data = [])
    {
        $data = [
            'username'      => $data['username'],
            'password'      => $data['password'],
            'client_id'     => env('PASSWORD_CLIENT_ID'),
            'client_secret' => env('PASSWORD_CLIENT_SECRET'),
            'grant_type'    => $grantType
        ];

        $client = new Client();
        
        $response = $client->post(route('oauth.token'), [
            'form_params' => $data
        ]);


        if ($response->getStatusCode() != 200) {
            throw new InvalidCredentialsException();
        }

        $data = json_decode($response->getbody());

        // Create a refresh token cookie
        Cookie::queue(Cookie::make(
            self::REFRESH_TOKEN,
            $data->refresh_token,
            864000, // 10 days
            null,
            null,
            false,
            true // HttpOnly
        ));

        return [
            'access_token' => $data->access_token,
            'expires_in' => $data->expires_in
        ];
    }
}

and it works fine and outputting 'access_token' and 'expires_in'

what Iam confused about is:

  • let say I want to display the username in "[email protected]" view, which is proteccted by "web" middleware, how can I do that ?
namespace App\Http\Controllers\WebControllers\Front;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;

class HomeController extends Controller
{
    public function index()
    {
        return view('index');
    }
}
@if (Auth::check())
<h1>{{ Auth::user()->username }}</h1>
@else
<h1>not authenticated via Passport</h1>
@endif
  • Iam logging users in using API and Passport which means I cant use sessions in my app? only tokens .. right ?
  • can I use sessions and passport with singe login via API ?
  • Iam splitting my controllers to ApiControllers and WebControllers controllers .. so WebControllers will return views and ApiControllers will return json , also WebControllers will consume the same API routes consumed by ApiControllers .. so I can only write my logic once inside services classes which will return json only responses for both ApiControllers and WebControllers .. so a mobile native app will talk to ApiControllers and web app will talk to WebControllers. is this the right way to do it?

Iam trying to learn, so bear with me :)

02 Jan
10 months ago

Ranx99 left a reply on Best Way To Structure An Application For Mobile And Web?

@martinbean

by "structure" I mean, If I used API routes(for mobile requests) and web routes(for web requests), then should I separate my controllers to:

API controllers (controllers will return json data only) web controllers (controllers will return views)

OR

If I only used API routes (for both mobile requests and web requests), then all my requests and controllers will only return json data, It will not return views. If I rquests some api route from web, how can I display this data coming from the controller since Iam not returning any view !

Iam confused .. hope I explained this well, and sorry for my english :)

Ranx99 started a new conversation Best Way To Structure An Application For Mobile And Web?

Iam building a big application using laravel + vue for learning purposes .. now, lets say in the future I want to build a mobile version for it. with keeping in mind all my routes are inside wep.php for now.

  • Should I convert my current routes and use single APIs for both web and mobile for all requests?
  • if I did that, how can I distinguish between mobile request and web request, so if its web request It will return view, otherwise return json.

Whats the best way to approach this?

16 Dec
10 months ago

Ranx99 left a reply on Best Way To Handle Status Field !?

@PovilasKorop

thats what I was thinking (it will be much easier to add a new status in the future ) , but why didn't you use only one master status table for all , not users_statuses , posts_statuses etc ..

Ranx99 left a reply on Best Way To Handle Status Field !?

@bobbybouwmann what about using a separate table for status and store status_id to each table

Ex: users table:

  • id
  • name
  • email
  • password
  • status_id