Creating A Default Team After Sign Up

In this stream, we'll create a default team for users after signing up for our changelog application. After signing up, we'll take the user to a screen where they can update details on their default team.

Published
Dec 15, 22
Duration
1h 41m

Developer, dog lover, and burrito eater. Currently teaching AdonisJS, a fully featured NodeJS framework, and running Adocasts where I post new lessons weekly. Professionally, I work with JavaScript, .Net C#, and SQL Server.

Adocasts

Burlington, KY

📜 Transcript:

0:31

y how's it going everybody um so today we're going to be continuing along with the changelog application

0:37

that we started in our last live stream um essentially through the last live stream we got authentication set up and

0:44

we got our models rigged up as well at least anything that I think that we're going to need out of the start so

0:50

um so we can sign in I think it's user one and then um

0:58

ah all right well authentication does work I can't remember the um

1:04

credentials at the moment but we can go ahead and continue on with today's purpose of the stream and that's

1:11

getting a actual team set up after you uh register so after somebody signs up

1:18

we want to create them a default team that they'll be assigned to that they can add additional members to or invite additional members to

1:25

um and we already have the model for that set up but one thing I did notice

1:31

shortly after ending the last stream I set these two relationships up as many to many for our posts and categories

1:37

from the team but these should be belonged too you can see if we go into the category model we have a team ID and

1:43

then the same with the uh where's it post we have a team ID on here as well so those aren't minute to menu I

1:49

got lost to my head on that one so that should be a has many there so I'm gonna go ahead and fix that

1:54

right there and right there

2:04

all right so now that should be good um so the next after a user signs up so

2:09

we don't need to worry about login just the registration step we want to create

2:14

a default team for the user um so that would want to happen you can

2:22

either do it after we log them in or just after we create the user I guess

2:28

we'll go ahead and do it after they're logged in just in case any issue happens for whatever reason they will already be

2:33

logged in so we can do this in line or we can create a service for this I think I might go ahead and just create a service

2:39

for this so

2:44

actually let's go ahead and just yeah let's just go and create a service

2:50

book so app file services

2:56

team service TS export default class

3:05

all right and I'm going to put a public make this static async method and we'll go ahead and call

3:12

this uh

3:17

stub default team except in a user

3:23

and I think that should be all that we need so we can do const

3:30

team equals await team dot create

3:37

let's see I can't remember what all properties we have on here but um just name this your new team

3:46

and I think that might be all that we need to provide out of the get go for a

3:52

default team oh we do need to set up the slug so in order to

3:58

create a team we'll want a generic slug to also be generated so let's go ahead and pull in

4:04

uh Adonis logify for that so slugify

4:10

or lucid slugify and let's get that rigged up so that

4:16

that automatically does that for us so I'm just going to copy this jump into my terminal which opened up on

4:22

the wrong screen right here okay make sure this is the right project yeah

4:28

cool let me paste that in there we go working on Windows all day

4:35

so I put the Ctrl C instead of or control V instead of command C and I put

4:40

down a weird 200 for whatever reason all right now we need to configure it

4:46

foreign so that should be all that we need to do there

4:51

then let's see it looks like we just need to import it so I'm just going to go ahead and copy that line right there

4:58

uh DB increment would be the strategy that I want so we'll go ahead and just copy those there as well

5:04

um so let's paste that import up here at the top and then

5:10

copy U H all right paste that right there

5:16

and instead of looking at the title that will be name and that should be all we

5:22

need to do there um doesn't look like that's picking that up let me try restarting the

5:27

typescript servers there yep cool just looks like that's good now let's go and boot the server server back

5:33

up

5:39

already so our server is now back up and running so it should be good to go ahead and

5:46

well we didn't actually create it yet so let's jump back into our team service here and finish what our thought was

5:52

so name seems to be really the only thing here that we have we'll add in some additional details as we go so we

5:59

should suffice by just providing in a name here and we'll just set it to your default team

6:05

that should work for now and then all we want to do is assign the user the team so actually I might create this a

6:12

different way so let's do constant team equals awaituser Dot and then let's grab the related

6:17

teams property off of it and just create it off of there that we won't need to worry about creating the relationship just whenever we create the actual team

6:24

that will happen your new team okay

6:30

and all right I guess that's really all that we have going on there for right now so let's go and just return back that team

6:38

and we don't need to wait um I imagine we will expand upon this further which is why I went ahead and

6:45

put it in a service so and we can just await

6:51

teamservice dot stub default team provide in user

6:57

and now we should have a team created whenever we actually register up a user

7:02

so if we go ahead and register up a user so sign up username

7:07

let's do me

7:14

and okay relation team user does not exist

7:22

oh it's team users yes so let me go back into the team

7:28

and on users let me specify the pivot table

7:35

as team users let me copy that configuration there and

7:42

paste it for the user as well on the team relationship I think I might also need to do that for

7:48

the we have another pivot table for category and posts so we'll do that there as well

7:54

um right here so pivot table

8:01

and uh category posts I think was the name of that one

8:07

so it's just looking for a singular name and I name that I'd name them um plural I get that right I think I got that

8:13

right okay and we need to do that on the

8:19

inverse side of the category there as well so we have the belongs to maybe I didn't

8:24

register the oh posts it was the post not the category

8:30

no maybe I didn't register any other side of this so we have posts for category posts

8:37

on the user um

8:43

yeah I think I'm going to put that on the team it's kind of out of it when at the end of the last stream

8:50

so okay that does look like that should be on the team instead

8:58

no that's posts I'm out of it right now by trying to put that on there

9:03

all right so should that even be a many-to-many Let's see we have posts

9:09

there which has a user ID so no it should not so users this should be a has many

9:17

there we go alrighty there we are all right so then

9:24

I'm looking for the category post so that would be on the posts and all right that's a relationship I

9:30

just didn't create so there we go so at Mini too many let's go ahead and Define this we're on the post right now so that

9:37

would be to the category pivot table

9:43

category posts public uh on posts that would be

9:50

categories mini to Mini type of and that would be category

9:59

all right I'm assuming I probably didn't um do the inverse side of that either correct so at many to many

10:10

post pivot table

10:18

category posts public posts

10:25

many to many type of

10:34

post okie dokie so should we get there

10:39

um let's go and try giving this another go so insert into team user so that should

10:47

mean that our user created but the team did not

10:56

so

11:03

if we try to redo that we're going to get

11:08

yeah let me just go and delete that record out probably be good to also put that in

11:15

a transaction Maybe

11:23

still getting that issue let's see insert into team users column team ID of

11:30

relation team users does not exist

11:35

team users okay

11:41

oh geez database migrations team users

11:49

it's there that I just not migrate it team users

11:55

I get I guess I just didn't migrate it all right let's go ahead and just drop the table and re-migrate it so

12:02

node Ace migration let's try refresh okay

12:08

so now we should be at a blank slate here um let's go back oh I gotta reboot the

12:14

server there we go

12:20

let's try this one more time

12:29

okay we still don't have a okay that's weird

12:34

team users we still have the relationships that we Define there

12:39

so why it has the ID

12:49

but not these

12:58

that is bizarre

13:06

relationships weren't fine for the category posts hmm

13:19

the team's table exists by the time this migration runs the users table exists the rules table exists

13:27

I feel like this is one of those things where I'm just different looking something but I don't know that's weird that the ID

13:33

and the created and updated I will get yep I didn't save

13:40

all right oh my gosh this is going swimmingly so far I can't run Dev

13:47

okay back to a clean slate here let's try this one more time

13:55

there we go remember to save your files

14:01

um so all right so we're back at the home page so we should now have our user and

14:08

we should now have that user with a default team and that user should now have a relationship record

14:16

um yeah the role ID is one other thing that we would want to apply into that because you don't want them to be just

14:21

they created the account they should be the administrator instead of just a normal user so let's go and take care of

14:26

that next so the default for that is to put them into a user so that if you bind any

14:32

future users they would be defaulted to just a basic user but if one's if a role is not

14:40

defined um let's see here trying to remember how you uh

14:49

create onto a pivot table that is

14:57

hmm

15:03

yep that's not coming into my brain right now let me go take a look

15:16

database orn relationships we are working with a mini to many

15:21

additional pivot columns yep we do need to add that into the relationship whenever we actually want

15:27

to go and pull it back let's see

15:45

might need to use um sink or the

15:50

apply I cannot remember it's driving me nuts that I can't remember

16:00

try taking a look at the reference here foreign

16:13

create ah there it is the second object

16:22

all right so that would be roll ID so I need to go

16:28

I can't remember if that needs to go in as a database or if it can just go in like this we'll try like this first

16:33

admin all right let me try using the command here to just refresh

16:39

foreign which database do you want to migrate

16:45

leave empty if using the default no okay cool that seem to do everything

16:57

uh Darius says hi Tom silent off is is selling off able to redirect to login

17:03

screen when guest is trying to get to a specific restricted page

17:08

um I would do a separate middleware for that uh so like

17:15

do do a separate off middleware actually I think one comes with Adonis so like with the default yeah right here so use

17:22

the auth middleware for that so you would just go into the kernel register this off middleware and then this has this reader redirect to just change this

17:29

to whatever your actual login page is and then apply this middleware to whatever protected pages that you want

17:37

and this will be what's in charge of redirecting them to whatever login page you have the silent auth is more just to

17:44

propagate any authenticated user you might already have on the session so there is a difference in purpose for

17:51

those being separated out all right so I'm going to go ahead and

17:57

give this a try again I can't remember if that needs to be roll underscore ID or if I can camel case it like this uh

18:03

with it being a pivot column that's where my question's coming in so I think I just refreshed our database yeah I'm

18:10

signed out so let's go ahead and try signing up again

18:19

all right yeah all right so it doesn't need to be roll underscore ID go ahead and refresh

18:28

again okay

18:33

come back into here let's go back let's try that one more time

18:39

I was sorry I slam the enter key um all right so we're back at the home

18:45

page so it seems like it might have worked let's go take a look team user roll ID of one so that did indeed work

18:52

so now the user is creating their account they're signing up and then we're creating a team a default team for

18:58

them and they're being sent to the administrator for that team so additionally what we would want to do is

19:04

instead of just making them ride or die with that default name that we gave their new team we'd want to take them to

19:11

a page where they can customize any of those teams details we'll expand upon this as we stream for right now that we

19:18

have is a name on there and then a slug so today our primary focus and then

19:24

we'll see how much time we have left at the end of the stream is to take them to a page to where they can update those

19:29

that name detail get the slug to where it will update with name change

19:34

um and then if we have time we will look at adding

19:41

in maybe a description or a bio and then Avatar depending on how much time we

19:46

have so let's go ahead and

19:55

take them to a new page that would be responsible for

20:01

editing their team so put this inside of a teams

20:07

directory here and we'll call this

20:12

Let's do let's do a singular page meant to update the team as a whole and then

20:18

we can add in an additional query string if you want to add in like a welcome message or whatever to welcome in brand new users so we'll do team slash

20:26

um edit so just make this a generic edit page for it

20:31

I'm going to go ahead and just copy a page that we have yeah this will work

20:37

or let's copy one that already has a four minute it'll be a little bit easier probably paste this in here

20:43

okay and then

20:49

we'll go ahead and stroll along with this so here we'll expect to have the team's

20:56

details so we can do edit team

21:02

team.name there as the title and then right now although we would have is just

21:08

the name field so we can get rid of all of those and just have the name here so name and then name would be name and

21:15

then we would also want to do the default value I think I set that up as a value here so we could do team.name

21:21

there and then I will go ahead and just set the action to an empty string for right now just so we can take a look at the

21:27

page and make sure everything's rendering okay and then update team there

21:33

give that a save we do need to register this route and rig it up to a controller

21:38

so route dot get slash teams slash

21:45

edit sorry ID slash edit

21:51

uh do we already have a teams controller we do

21:56

teams controller Dot edit as teams edit and then we'll want to put a

22:03

middleware on there so that only admins admins so that we can edit this route

22:08

but we'll take care of that here momentarily let's just make sure that everything's rendering up okay so far go

22:15

into our teams page here let's get our HTTP context uncommented public

22:23

I might recreate this as a resource I'm just going to go ahead and delete it

22:29

and recreate it as a resource that we already have all of those methods so Ace

22:34

make controller team

22:39

yes it is a resource there we go that's what I'm looking for so that we already have all the different methods that we

22:45

need there so edits the one that we're currently in so let's just grab view for that

22:51

um

23:03

foreign Edwin says hi Tom about the video you made on user roles the at if and the at

23:10

end can make the code kind of messy when you have a lot of user roles with

23:15

different screens is there a way to make that simpler I would need to actually take a look at

23:21

that and see um I I don't remember what exactly we did for that so

23:27

uh is there a particular page on that that's on probably the welcome page

23:32

probably

23:39

here yeah probably here um yeah you can simplify that

23:46

um that it really depends on what all

23:53

uh so instead of doing like a

23:58

is admin checked there I would extract it out into like a component and then

24:04

have the component render a slot that does the check for you

24:10

um I don't want to go into that and get too sidelined on the stream but trying to think if I have anything I

24:16

don't think I have anything like that so far but like so you do your If instead of a component that way you only need to

24:22

use one of these and then you can just do your component so it would be like at

24:28

uh roll check or whatever you call it and then you would have your at end for that

24:37

particular component sorry it wouldn't have a exclamation point there and then you could use the slots so at slot to

24:43

apply various different HTML for the particular um

24:49

role that you want to bind that to and then you can set that up kind of like case statements as well so if you need to show something for multiple roles you

24:56

can do that as well so that's one different way that you could take a look at structuring that that's what comes to

25:03

mind at the top of my head but if you sit and think about that for a little bit longer you might be able to come up

25:08

with something a little bit cleaner as well so uh hopefully that helps a little bit

25:16

if you render and then I named this teams edit I think oh and this is also

25:23

inside of pages so Pages teams edit okay cool that did take me to the page

25:30

so this seems to work all right and then we need to get the team um

25:36

I haven't used it yet but I have always meant to

25:43

there's a route model route model binding I can't speak tonight that we can give a go

25:50

so this will just automatically pull in our team here let me actually walk through this

25:56

just make sure that it's not going to take a second to bind

26:09

okay yeah let's go ahead and give it a go see if it works well it will work but let's see if I can

26:15

get it working why do I keep doing that foreign

26:29

can't get my key bindings right so I work on a Windows computer all day and I work on a Mac

26:35

for my personal stuff and it is so hard to train your mind to do one thing for eight hours and then to go and do

26:41

something else for another yeah no problem Edwin hopefully that uh

26:48

hopefully that does help you out not the best at coming up with things off the top of my head I normally have

26:54

to sit and think about them for a little bit all right so we have that installed

26:59

let's go ahead and get it configured all right and then just oh there

27:08

I'm just gonna copy copy it

27:15

all right there we go I did it twice to make sure I got the right key binding there okay

27:21

terminal is fine all right so server middleware looks like we need to do RMB middleware

27:26

so let me go ahead and copy that that is global server register

27:37

okay kernel yep right here

27:45

um yeah we'll do silent off before it there we go

27:50

all right and then

27:55

once we get that up I think since we do have the slug that we would want to look up off of

28:01

um we would want to go with we'll try about ID first just to make sure everything's okay so let's go ahead and see if we can

28:07

get it working so let's go into here okay good my AC just kicked on I was

28:14

making sure that the AC the heat just kicked on I was making sure that it wasn't getting picked up so let's apply bind there

28:21

and I guess I I think that comes in as the second argument so that would be

28:27

team there as team and then we can just apply that into the

28:33

page like so no need to query it ourselves so the way that we have that currently

28:39

though I believe we need to provide in the ID and edit and I didn't start my server

28:45

back up there we go I need to use the second

28:52

terminal for other commands Okay so

28:59

that looks like it can't find the route maybe I didn't save the route file

29:07

oh I didn't well okay yeah it is slash teams slash

29:13

hey there we go so we have our team so it is working um so what I want to do is swap the ID out for the slug

29:21

and then we also need to make sure that this is unique uh for the select

29:29

so we would want to

29:34

come in here or no actually I think it's the route well it's a model it's the model I remember

29:41

seeing it but let's go take a look and make sure that we get the right thing so it is

29:47

change lookup logic nope that uh maybe that was an interesting to scroll down a little bit

29:54

no I don't remember seeing all that scroll up there it is that's what I'm looking for right here the lookup key

29:59

just change that slug from the ID default so jump back into here and go into our

30:06

model scroll up to the top paste that in there all right so now that should look up off of the ID

30:14

another fun thing that might be good is to just instead of doing your new team just give it a generic random name

30:21

um I'm using something I'm using a pack package for that on

30:29

the addocast site sorry I didn't need to resize that so the fits

30:34

so let me go take a look and see what that package is uh that is in one of my services

30:42

and then identity search is on it yeah unique

30:50

unique names generator I cannot speak apologies so let me go ahead and install that I'm gonna

30:56

just grab out array of different uh generic names that you can give anything so

31:02

I'm going to go ahead and just let me go over here finally instead of restarting the server every time

31:08

tutorials this is changelog something there we go and

31:14

PMI there we go cool so

31:21

I'm gonna go ahead and just uh copy that whole import

31:26

and then jump over to the changelog app again and we can do

31:34

um naming service

31:44

just in case we need to do this for anything else down the road public

31:49

static and I have to assume that's probably going to be async um

31:55

get random name okay pop that import up there and then

32:01

I'm gonna just instead of looking at the documentation I'm just going to look and see what I'm using this for so

32:09

right here just passing in the dictionaries and okay so I'm just gonna

32:15

paste that in here be a little bit easier than digging through the documentation for that

32:21

and we just return the name there switch the length so this will be like

32:27

the word length I think and then the separator you can make that a space style capital I don't know whether or

32:33

not that's all cap or just Capital case but uh we'll do that all right looks like we have a naming

32:39

differentiation here I'm gonna go ahead and just get rid of that we don't need that just do some

32:45

random name okey-doke all right so that should give us a

32:51

random name so we can go ahead and go into our team service now and import

32:58

const name equals and then we can do uh what did I just call that naming service

33:06

dot get random name I'm going to double check and see whether or not that does actually return back a promise yeah it

33:12

just said well I think that's because I put async on it now that looks like it's synchronous so

33:18

I'm going to go ahead and get rid of the async and then we should get our name there we

33:24

can get rid of that value and

33:33

yeah so that's no that's fine all right let's go ahead and try that once more

33:38

just to see whether or not it works so I'm going to go ahead and refresh the

33:44

database and come back into our application come

33:51

over here yeah of course that doesn't exist anymore so it's not found

33:57

sign in sorry sign up

34:11

there we go hopefully I spelled that right let's try and spell password zero one it's so hard

34:17

um Okay so let's go take a look at what the actual name that came out for the team was

34:25

shrew martitta so yeah that's

34:31

that'll that'll work um cool so what we want to do is take the

34:36

users directly to well no I didn't finish my original thought which was to or yeah we did we did change that so now

34:42

it should be slash teams slash the shrewd Martina

34:48

Slugger whatever that slope value there is I'm going to copy that because I know I'm

34:54

going to misspell it come back in here so then we paste that in there and then we can edit and there we go so now we

35:01

just replaced out the ID value there for the slug and the route model binding is working just fine there

35:11

uh Darius says in your previous live we can see you are creating custom button

35:17

components I want to know if it was simply to use

35:22

bonjour BTM primary on htrs except custom components to save time and

35:28

perform um it's just so that I don't have to remember the class names and go back to

35:33

the actual documentation every time that I want to try and remember um and it's for things I mostly do that for

35:40

things beyond the button so like if you want variations so like is it BTM primary ghost or what what have you

35:48

um and then for inputs it comes in handy as well because you have some additional markup there but one thing that I really

35:54

like doing with my components especially for buttons is to have a base layer that

35:59

takes in all of the arguments that all of the different variations of the component might accept and then it

36:05

handles them so like here I have I think I might have done this off screen while I was trying to fix some of the style

36:11

stuff but it has an if href so it can accept a link as well as just a normal

36:17

button and submit buttons so if you provided an href it'll apply that button

36:23

class to an anchor tag instead of a button otherwise it will go to a button default default so another great reason

36:30

why you might want to do that as well so you don't have to worry about applying the same thing over and over again and

36:35

then if you go to do something with unpolly or whatever you can use that to abstract that away

36:42

as well so I I like it for abstraction because I'm a forgetful person and I you

36:49

know I admittedly whenever I go to think of a form I can't remember if it's

36:56

form control form input and then I either have to do a 50 50 guess and get

37:02

a probably come up wrong or something of the sort

37:08

so that's what the button looks like and then each individual one is just a simple it calls that base button and passes in each of the arguments so that

37:16

that's this type of thing that I like to do there and then for the form components that comes in even further because then you add in the method

37:22

spoofing on top of it so there's a lot of fun things that you can do with components to save yourself just time down the road just by the simple setup

37:29

that you can do at the very start of a project or whenever you're pulling a new component so I really like

37:35

componentizing stuff instead of having the actual markup all throughout so it it can be a personal preference it's

37:42

kind of like do you like Tailwind or don't you like Tailwind or do you like a bootstrap or don't you like bootstrap so

37:47

it's a personal preference thing but I like abstracting out components as much as possible so

37:55

especially if I know I'm going to use it more than once so come back into this page here

38:04

and so we verified that we got that working what we want to do is

38:09

allow the user to update it so we can do just basic update first and then we can start taking a look at making sure that

38:15

things are unique as they're typing so let's go ahead and get the update so

38:21

let's start with a route so route Dot uh we'll do a put because technically this

38:28

is an update and although we are only updating one property right for right now it will be more in the future so

38:34

teams um that should actually should that still be ID or should that be slow

38:41

I mean ID worked but yeah I guess that should still be ID

38:46

okay ID there

38:52

um and then that can just be like that teams controller

38:58

updates is teams update

39:05

give that a save jump into there and so the same sort of thing here we're just going to get the team right here we

39:11

don't have to manually query for it and then request a response be two things that I

39:18

know we'll need so I'm gonna go ahead and make a validator

39:25

um is validator we will call this team

39:33

I'll separate it out as a sub one separate one so yeah no actually just yeah because we'll

39:41

automatically well no yeah we'll do team update just in case because you'll want you'll

39:46

want to allow the user to add in additional teams down the roads instead of just being restricted to the single

39:52

team that they're automatically created whenever they register so all right here we have this right now

39:58

it's just going to be a name schema string it will be required rules

40:04

dot oh I need to import rules

40:10

okay that I'm going to apply a Min length of

40:16

this to and we'll do three and then rules dot a unique check here for table

40:26

that will be teams column will be I

40:32

the no no sorry that's a slug I'm thinking of the slug

40:38

we don't need to do a unique check it can be named the same thing as

40:44

another and then the slug of vacation will take care of DB incrementing it if it is the same as something else

40:49

so in length of three and then a max length I guess would be

40:56

although we need there max length uh what did I give it in the database we'll make sure that we adhere

41:02

to that teams name I didn't give it a links okay

41:08

so maybe maybe 100 because if it's any longer than that it probably won't run into display issues on the pages and so

41:16

that should suffice for right now for the validator it's not much but it's all that we have so const data equals awaits request dot

41:25

validate uh team update validator

41:33

and then team merge data

41:39

add a weight in there and we can just call Save right off of that and then return response Dot

41:48

redirect and we can either redirect them back to the form or we can redirect them to the team

41:54

display page that we don't currently have so I guess for right now we'll just do

41:59

the home page

42:05

actually we could yeah yeah let's just do the home page

42:11

for right now so okay so if we come into this form here and I change it to

42:16

something that I can actually spell um and then we hit update there

42:25

I it looks like I didn't actually update the post or the action

42:30

to match the route so let's go do that I did indeed not

42:36

so route teams.update and then we also need to

42:42

provide in the ID of the team dot slug

42:50

okay let's try that again

42:55

oh right it's a post so I can change this put or get that to

43:01

a put let's try that one more time

43:06

Okay so can't read merge which means that team's

43:11

not defined which means that it is something I did wrong with I didn't save

43:16

something on my checkbox let me go ahead and do that um teams controller so it means that

43:22

something isn't working here with that with the lookup so

43:31

should if it worked for the display it should work for that right

43:37

that's what my thought is so teams shrew margarita

43:45

put comes into here

43:51

we go into the routes I named it the same

44:01

hmm I'll try slug

44:06

see if it needs to be called the yeah I didn't think didn't think that

44:13

all right let me double check make sure that well yeah no we are actually on that page right now so it is indeed

44:18

working um so

44:26

um let me try the ID and see if the ID will

44:33

work we're just trying various things right now let's see if I can pinpoint what's wrong exactly

44:40

so we we did name the param ID let's try

44:45

team ID there

44:57

hmm

45:06

see what we're getting let me change back to how I had it by providing in the slog there

45:13

actually let me try it slug there as well and change that before I just changed it on the route

45:22

okay

45:28

see what we got

45:33

yeah it's undefined at least for that one let me change a bag to how it was

45:38

try that one more time keep going there we go okay

45:49

yep that's undefined too interesting

45:57

um so I added that in

46:21

see you gotta read so they recommend using the model name

46:26

as a route param because we're no longer dealing with the ID which makes sense

46:31

so I guess this would be team and this would be team

46:39

I don't know why that ID one works for the get though but see if this works first

46:46

oh wait why is that an ID did I change that

46:55

no I have it as slug why is that 90

47:00

now there we go hmm

47:05

okay I might dig into that in my non-streaming hours so that you're not

47:11

just seeing me going back and forth going huh um so let's just go ahead and um

47:20

try one more thing there let's try the individualized one yeah okay

47:26

okay make sure that the team exists but yeah it does your opponent didn't explain it

47:32

on the page so all right so okay I'm gonna replace this with just

47:39

slug I'll Circle back I'll Circle back on that

47:46

and so then we can get params there and const team equals await team Dot

47:54

find buy or fail slug params slug

48:02

now if this doesn't work then I need to just go to bed

48:08

okay there we go all right so let's go back and let's change this to actually

48:13

something else and I will dig into why that route model bonding there was not

48:19

working for me what I did wrong I'll figure it out and let you guys know in the next stream that we do um

48:26

I need to do a lesson on that as well so um yeah so now our team name should be

48:31

Auto casts and it would be great to actually display that somewhere so why don't we add in next to this change log

48:37

a little slash and then the team name there

48:43

so it would be in the header and this is one thing that I updated so I changed it we just had the change log

48:49

over here and then the buttons over here on the right hand side um I figured you guys didn't want to see me mess around with the header so I went

48:55

ahead and just did that off stream um so we have now a mobile and a desktop

49:02

version as well and I just need to find where the

49:09

actual change log name is I think that's on the mobile one we'll just worry about desktop

49:22

oh you know what mobile and desktop probably is the same one

49:30

yep okay cool so that would be that so let's go ahead and just change this

49:36

to a div class Flex um it should probably actually be an

49:41

inline Flex so that's not taking up too much of the box and then we'll do just I'll change that

49:47

here momentarily but for right now we just do a basic slash and then we will do a button

49:54

drop down to a drop down button so we come into

50:00

our components here I don't think we've done a drop down button at all yet no we have not so let's go add one come into

50:07

here I'll need to find it

50:16

right there alrighty go ahead and copy one

50:24

and let's do component new file drop downs slash

50:35

do this one as the base since it doesn't have a whole lot going on um

50:46

slots main actually I'm going to copy that oh it's just a listing a okay never mind there's not much there

50:52

um and then this will be the trigger so we'll do

51:00

slots Dot trigger and we'll actually wrap this up so at if

51:06

slots dot trigger at else at end if

51:12

so if we have that slot then we'll use the slot otherwise

51:19

we will just apply in some Trigger text so that should suffice

51:25

for right now come back into here

51:31

and let's do at

51:37

drop down stop base trigger will be and then we need to

51:43

actually use add the team name so right now just hard code some team at

51:51

and and then inside of here as the options what we would want to do is list out any

51:56

additional team that the actual user might belong to as well as give them the

52:03

option to create a new team

52:11

uh Darius says the sign out route why do you choose get them post or delete to prevent csrf attack

52:19

um

52:27

no particular reason I can change that to a post it's a good point

52:35

so we can go into the header and

52:41

then on here change this to

52:46

a button type equals submit

52:54

and the button

53:03

for post action route off

53:09

I can't remember if I called that logout or sign out

53:15

now I don't have csrf enabled yet on this so I can't do csrf on it but

53:24

actually let me look and verify because I probably called it sign out let's sign in and all that stuff yeah call this

53:29

sign up okay

53:36

and all right looks like I got a rogue end if

53:45

oh it's the um the drop down that we're adding I didn't no I did end it

53:50

oh boy where's my end if Rogue

54:03

okay so it does look like it's something with that hmm

54:14

that's forms there we go all right so let me try that

54:20

yep there we go thank you for that recommendation Darius

54:28

oh there we go alrighty

54:33

and Edwin says do I have to install both the Tailwind CSS and Daisy before I can

54:38

use Daisy UI components yeah I think Daisy's just like a rapper it will create actual classes

54:45

um

54:51

yeah so you'll actually apply daisy as a

54:57

Tailwind CSS plugin so I think at the end of the day they use like the uh the

55:02

decorators that Tailwind provides so like the apply and all that and then I use the theming system as well so like I

55:09

was taking a look at this earlier if you change the theme which they come with a number of different themes out here you

55:14

can apply that within your tail and CSS or you can change the colors manually within the Tailwind CSS as well so I

55:22

think it is pretty heavily bound to Tailwind um

55:28

but there might be a configuration where it works the same as something like bootstrap I'm not 100 certain

55:37

this is actually the first project I'm using it on so

55:44

that button looks big let me change the size of it see if there's a smaller drop down

55:55

I guess it'll just be the button wouldn't it

56:00

let's see

56:05

right here BTN

56:10

all right so that comes into the button

56:22

really small BTN smart okay

56:31

now that's too small all right let's see if that changed the size of the header at all

56:37

now I think the size of the header is staying the same it just looks really big to me because the screen scaled

56:44

okay all right so we'll leave it as that so that the text is the same size all

56:50

right so next I wanted to take a look and see how the

56:56

different options looked for the drop down so I saw a little further down here there was an option to have grouped

57:06

stuff maybe it was this one no um I know I saw it

57:18

drop down right line drop down left all right well if I can't find it then I

57:24

would just put some basic let's put some basic stuff in there first

57:29

so um it would be header and we don't have

57:35

this route created yet but we'll put it in here so that we know that we need to create it and that this is where it goes

57:41

that's the wrong thing up here

57:54

create new team something like that

58:01

so boom okay

58:07

and so if they had any other teams that would show up down here and now we need to actually propagate the team in itself

58:15

throughout this as well so there's a couple of different ways that we could do that I tend to do it via

58:23

middleware so I'm going to go ahead and create a middleware here

58:29

and let's call this

58:34

App State okey-doke

58:46

let's go ahead and configure it um we'll put it in here as a global

58:57

and we'll come in here and just limit it to get requests so we'll get it

59:03

or get request there and so we can do

59:10

since we're just going to be sharing stuff to the view we can do this after next I think that I think there's any reason to do it before so method request

59:17

Dot method to get the method if

59:24

method equals get I think that comes in as uppercase

59:31

well we'll make sure so if method equals get or if actually

59:38

let's make that a little bit cleaner and do does not equal get then we'll just return out

59:46

um

59:52

exit if not get request okay and then down here we can do Let's see

59:59

we will need so then it comes time to think how do

1:00:05

you want to persist the user's currently active team and

1:00:12

that's where you would probably typically hold it within the URL you

1:00:17

could put it in the session if you wanted to but then you take the ability for the user

1:00:23

to say here is a link to something I'm looking at on this specific page

1:00:29

and then so long as the user is a member of that team you can just copy the URL and paste it to them so they can go directly to it so that

1:00:36

the heck did I just click on that's oh

1:00:41

I yeah all right Tailwind hides the classes and I guess I clicked on something random here

1:00:48

um all right so yeah so now we want to house that

1:00:53

um I didn't think about this before I started the stream on how I wanted the

1:00:59

do this with y'all but uh let's see here so we can do another middleware that

1:01:06

verifies that if they're authentic so this is where we

1:01:12

would want to separate out the app from like the welcome page so like we will do an actual app home page here

1:01:22

and we'll do Global here so route dot get group sorry about that group

1:01:31

prefix this with the

1:01:36

team ID

1:01:41

is app and then inside of here we'll have these

1:01:47

individual URLs and we'll also want a home page so route.get slash

1:01:54

and then I guess we'll call that dashboard

1:02:00

controller so make controller dashboard I can change it later on if

1:02:06

that's not the name I'm wanting to go with since I

1:02:12

didn't put too much prior thought into this particular portion of this so public

1:02:18

async index HTTP context contract

1:02:26

okay you turn view dot render

1:02:34

Pages slash dashboard

1:02:41

and we'll just have that be an empty page there but we won't provide anything to it right now and then here we'll do

1:02:48

dashboard controller dot index as

1:02:54

dashboard so now the whole app path would be app dot dashboard

1:03:00

app.teams.edit app.teens dot edit or update um and then we actually need to go and

1:03:06

create that app page and then go through and update the names of any routes that I already put in here

1:03:12

actually I don't think we put any this is a really long tangent from the original Quest that I started on to

1:03:18

actually just take a user to the edit page after they've signed in after they've registered

1:03:23

doing a big old Circle here um I just realized that's what got us on this tangent so okay

1:03:37

So within our Pages we'll just do a dashboard.edge and I'm just going to copy what we have in the welcome page

1:03:43

and then I'll just replace it with this as your dashboard or something like that for right now um I'll need to think through what all we

1:03:49

want to put in there so H1

1:03:55

your dashboard so that we know that we're on the dashboard page there cool

1:04:00

um and then um

1:04:10

so then see we run the middleware that's what caused me to create that so App State

1:04:16

so if it's not a get we'll return out if it is a get but there is not a

1:04:23

team ID in the params so let's also grab the params

1:04:30

then what we'll want to do is grab the user's last used or their first or just some team to send them to the way I've

1:04:38

done this in the past is on the actual user record I would say if their last accessed

1:04:45

in this case team and then save that into the record so that if they ever just came directly into the application

1:04:50

we just forward them off to their last used one instead of just whatever first one they have in their account so we can

1:04:55

do that here as well so user table Dot

1:05:02

this would be a relationship so we wanted to do integer

1:05:08

see what will be a good name for this last accessed team did I spell access right

1:05:14

there ID nullable because

1:05:21

there's a brief moment where the user has been created but the team has not

1:05:28

and then unsigned actually let's put that first

1:05:34

because it is a relationship unsigned dot references ID

1:05:40

in

1:05:53

okay yeah and then we do last access team ID on the actual user

1:06:00

so put that up here and column public last

1:06:06

access team ID and it's going to be either a number or null

1:06:13

and down here that's going to be a belongs to

1:06:21

and that would be a team I don't think we'll actually ever preload the

1:06:26

team this way well actually yeah we could probably just reach right through it to get it so I take that back

1:06:32

nevermind team and then belongs to type of

1:06:40

team and we do need to provide the local key for this relationship I think

1:06:46

is local I think no

1:06:52

I think belongs to the one that's normally backwards with how I with how my brain thinks anyway

1:06:58

um so and then we just need to provide in the table name for that the table column

1:07:04

name for that so that b lessed access team ID

1:07:11

oh shoot that is Kim okay snake case sorry from the snake kits there we go just

1:07:16

punch my mouse give that a save so that should I think work and then after

1:07:25

they authenticate I'll come back into this and they stub that default team what we can do there is take that team

1:07:33

ID so where do we have that return right here so const team equals

1:07:39

a weight don't forget the await and now we already have the user so we can do

1:07:45

but wait dang wait user dot merge

1:07:50

and that last access team ID as the team.id so that

1:07:56

that since we're going to take them directly to that team after they've uh signed up anyway

1:08:01

uh we just set that automatically to the last access team for them give that a save and then we can return

1:08:07

that team back okay

1:08:13

so

1:08:18

home no longer applies we want to instead take them to that we can finally do it the edit page

1:08:25

for the B app dot teams dot edit

1:08:32

and the ID for that is

1:08:38

I gotta get the team back from here so constant team equals

1:08:44

team.id er no sorry it is Slug

1:08:49

give that a save and then we can jump into

1:09:00

foreign query

1:09:08

Qs Qs so let me break this down because it's getting ugly

1:09:31

we can provide some query string in there so that we can inform ourselves this is a brand new user so that we

1:09:38

could display some message like welcome set up your team account or whatever

1:09:44

and then uh trying to remember if I forgot anything in that yeah the App State

1:09:53

so I don't think this particular trick to make sure that we have a team

1:10:00

in the URL should be here I think it should probably be in its own

1:10:05

middleware but we can go ahead and add in what this one was for which was to do const

1:10:13

team equals await team Dot

1:10:20

find by and since we want to ensure that there

1:10:26

is a team we can do or fail there I think that should work params Dot

1:10:33

team and I call it ID but I think we'll change the name of that to slug

1:10:50

okay and then we would want to do view so we'll grab view out of our HTTP context

1:10:56

as well and do share

1:11:02

the team and so now we'll have the team accessible on our page

1:11:14

so we can do

1:11:20

trying to find it oh that's the right here

1:11:26

team dot name as the trigger string give that a save and

1:11:33

oh right okay

1:11:43

all right let me make sure that we're getting a team coming out the header

1:11:56

oh yeah yeah of course doesn't exist it's not in there

1:12:03

all right there we go so now we're getting the row not found here

1:12:08

so let me go check and make sure that the foreign

1:12:20

's working all right so

1:12:29

give that a save back into the browser give it a refresh let's take a look at the terminal

1:12:35

and it is there all right oh never change slugify to update the slug

1:12:42

so it's still that really weird string I bet you really weird string true Margarita

1:12:48

Martita I just can't say it it's not weird I just can't say it all right

1:12:54

so yeah so we do we do want to update that as well so instead it's this so there we go

1:13:00

all right still getting undefined there though

1:13:13

okay so we can give that a go and

1:13:26

try getting rid of that yeah I think so

1:13:56

all right foreign

1:14:23

what is my brain missing here

1:14:44

let me back into our layout let me comment the

1:14:49

header out all together let's go into

1:14:59

our dashboard

1:15:11

oh yep okay

1:15:17

that is my bad we do need to do this before next because after next The View has already been

1:15:22

rendered so apologies about that

1:15:31

let's move that up let's move this up and then instead of we'll just flip the search or this here

1:15:42

so that it contains inside of it so instead of returning there we'll just

1:15:48

propagate that only if that's in there

1:15:53

okay and change that to an equals

1:15:58

and now there's our team okay my goodness

1:16:06

so if we go back into our main page here

1:16:12

there there we go now it's up there man sorry about that

1:16:20

foreign Journey there

1:16:27

so okay so our slash is definitely not in an

1:16:32

appropriate position but we do have our um new drop down here to where you would be

1:16:38

able to create a new team which will do at a later point in time right now we do want to get that uh slug up here to

1:16:45

where it will update with the change and we also want to add in and edit

1:16:53

see where we're at a good place to put that be inside of here or over here probably in like a

1:17:00

hmm well let's actually re let's finish our thought with that

1:17:06

redirect first so creation refresh

1:17:17

yeah that makes sense nowadays migration fresh

1:17:25

oh oh that was a running error okay

1:17:31

because the team does not exist yeah that that makes

1:17:38

sense as well

1:17:43

hmm just full of brain farts tonight let's see here so I put that on the T on the user

1:17:55

maybe I didn't uh yeah

1:18:00

maybe I don't usually make it a foreign key

1:18:12

no I think it's usually an alteration ad yeah so instead of adding it in here let me

1:18:18

do an alteration ad that way you can still have the form key because the table will have been created so make

1:18:25

migration users add last

1:18:32

team

1:18:44

okie dokie there we go and we'll just drop that in there so now it will be an alteration ad

1:18:50

um and then we can go ahead and table dot drop

1:18:58

foreign

1:19:05

table dot drop column

1:19:13

all right give that a save and I guess we don't need well I yeah I already

1:19:18

tried I already dropped everything in the database so let's just go ahead and do node as migration

1:19:23

brush just to drop everything and rerun okay there we go

1:19:28

so now on our user we should have a last access team ID on there that we set to

1:19:35

the actual value after we create the user and then we'll do that in addition anytime that they switch whenever we get

1:19:42

to that point in the project um so if I refresh here we'll be logged out

1:19:47

and actually I will get unable to connect because I forgot to restart the server

1:19:54

okay so now if we refresh okay we're not found because we're trying to find this true Martita

1:20:00

here we're going to find buyer fail because

1:20:12

of that App State middleware we want to limit that to just here so instead of

1:20:18

making that Global I'm going to change out the name

1:20:25

so put an app state that way it doesn't run on any of the authentication or anything like that so we'll scroll back down to our kernel

1:20:32

take that out of here and scroll down to the name middleware

1:20:38

and give it a name App State in there

1:20:43

there we go why are you giving me squigglies

1:20:50

oh yeah okay

1:20:55

so now we should be able to refresh here again and we won't get that fine by our fail because that middleware won't run

1:21:01

but we do we do get that because we're not logged in and we don't have a team set up so we

1:21:07

can go into our header and where we have this

1:21:14

we do at if user

1:21:21

and well yeah just for safety sick let's also do in team

1:21:33

yeah so give that a save and now that should do that and then once we get going these

1:21:41

here will also we won't want to show we'll just want the two

1:21:47

um so we can wrap this in an if as well

1:21:52

I think yeah I think I got everything there I think we'd want to leave the nav bar Center I imagine that's probably

1:21:57

needed to justify between um so we'll leave that there

1:22:04

so if auth user and if

1:22:11

give that a save and then while we're here we'll go ahead and do the mobile version as well

1:22:16

yeah there's a UL end right here

1:22:29

okey-doke wow the stream went on longer than I thought I was going to do 90 minutes but

1:22:35

what are we at now I don't know where to find the time I don't remember when I started uh okay oh

1:22:42

there it is oh okay I just don't know time we're at an hour and 22.

1:22:48

so um well we'll finish all of our big

1:22:54

circle here so that we at least have a concluding thigh here at the end so okay now if we come in here we just have the

1:23:00

sign up sign in if we go ahead and sign no we need to sign up because I

1:23:07

just finished migrating the database so we can go ahead and do this we should get taken back to the edit page for the

1:23:14

new project that we're about to be created so let me go in here

1:23:23

uh shoot can I make route URL team slug param is required that's right yep it is

1:23:41

auth controller I'm gonna have to look and see what I did in my other project where I

1:23:48

have something very similar to this setup to so that I didn't have to um apply

1:23:53

this parameter over time or maybe I didn't I just don't remember but I don't I don't feel like I am team Slug and

1:24:00

this would just be that team dot slug that's repetitive isn't it all right

1:24:06

well I guess we could take those out of that

1:24:12

App State since those would be specific to

1:24:19

nah we'll go ahead and just leave it in because then we have the team slug to return them back to once they're done

1:24:25

with whatever well no you would probably want to return them back to the team that they've just finished editing so yeah we

1:24:31

can take that out that makes sense all right and then after that put we

1:24:36

will return them back to whatever this team page would be um or I guess it would just be this dashboard here so

1:24:43

let's go and do that before I forget so in here return to

1:24:49

route was it just that was just that app dot dashboard

1:25:00

team slog it's team dot i sorry team dot slug

1:25:08

okay give that a save so now after we update we should be taking back to that particular team's dashboard and now for

1:25:13

the auth the redirect here we just want to return back team.edit instead since we took

1:25:20

that out give that a save

1:25:29

all right jump in here

1:25:35

okay we're gonna run into an issue because that already

1:25:40

yeah I'm gonna I'm gonna refresh because I want to make sure that redirect works no I don't want to open affinity

1:25:47

clicked um okay creation

1:25:54

refresh there we go

1:25:59

okay come in here go back to sign up no I don't want to resend sorry but I want to go back

1:26:05

instead okay nope that's

1:26:12

I misspelled it there we go

1:26:31

oh I caught it team okay so we we okay I see it yeah open the URL we did get redirected to I'm pointing to it I need

1:26:38

to hoverboard we did get redirected to the right URL there so everything worked there we even got the new user query

1:26:43

string um the issue is just within the uh where I was messing with the uh route model

1:26:48

binding down here so we need to jump back into the team edit so team slash

1:26:54

edit and change this to slug and that should fix the display issue

1:27:00

there there we go all right I think we're almost at the full circle we do need to change this so

1:27:07

that whenever you edit the team the slug updates as well so I need to that's not that one that's

1:27:14

this one um updating slugs

1:27:25

yep

1:27:38

gotcha yeah that does make sense because you know if you change the slug name then it's going

1:27:45

to um so maybe we added an additional field to allow them to update the slog that way

1:27:51

they have you know the manual ability to update that

1:27:57

so we can add in at inputs text

1:28:04

actually let's add that in as a checkbox to update regenerate slog or something of the sort

1:28:09

so at inputs check box

1:28:15

label regenerate slug

1:28:24

name

1:28:33

well actually it no I don't know whether or not this package can support an

1:28:39

on-the-fly termination on that because it's just right there within the

1:28:44

slug of Phi

1:28:51

I'm sure it can but I don't know whether or not I want to sit here and dig through the documentation to figure it out at this present point in time

1:29:06

yeah why don't we leave this slug as is

1:29:11

since in most common cases well yeah you do want to change it on the very first one though

1:29:19

mm-hmm

1:29:26

I'll leave it as is for right now and I'll think about that we'll come back to it in the next lesson Earth next stream

1:29:32

um the issue I'm thinking of is so we've generated a name for them automatically

1:29:40

duck taiwania and so it got a slug from that

1:29:48

do slugs really even matter at this for the team I think so so

1:29:55

because you know you're going to have a public-facing page as well with a change log to be able to point people to it so

1:30:02

it would be good to be able to support you know your Brand's naming um

1:30:09

I'm gonna double check and see how other places support this and then I'll get back to it I'm pretty sure

1:30:15

manual field would be the ideal solution and I'll need to look and see exactly how Lucid sluggify would support that on

1:30:23

the Fly determination there might just be nullifying out yeah actually let's go and try that let's try nullifying out

1:30:29

the value first and then re-emerging it well that's not a not not that's a not knowledgeable column though isn't it

1:30:37

yeah but if you set at the null before you save it might update it we'll see

1:30:43

let's put it in there

1:31:02

all right let's give it a go sorry I Thinking Out Loud

1:31:07

it's probably good to do on stream but hopefully it all makes sense slow schema

1:31:13

string optional

1:31:26

125 give that a save and let's see what none of this would work so we'll come

1:31:31

back up into our team controller where we're doing our updates

1:31:36

so we have the data here

1:31:45

if data dot Slug and

1:31:57

then

1:32:07

yeah I think that's just the issue with uh so if we come in

1:32:13

I'm going to ignore that and just see if this works if it does then that answers the

1:32:19

question of whether or not package would allow that so

1:32:29

yeah yeah that worked we got redirected the DuckTales um so cool so

1:32:37

then the issue becomes do we just ignore that because it's definitely required but I

1:32:45

don't want to make it optional on the model and have it be optional everywhere

1:32:51

you know come through as possible team

1:32:57

yeah so I guess that would probably be the appropriate thing to do is to put that in there so that

1:33:03

because if something were to go wrong well if something were to go wrong that's

1:33:09

nothing gets saved between here and there so I don't think anything would go wrong

1:33:15

but we'll put it there just in case all right and so let's put a link back to editing

1:33:24

here I guess we'll just put that in that little header box for right now

1:34:03

something like that right Dylan's ID in it

1:34:12

that probably makes more sense to be on actual ID there turn that off let's go into the team

1:34:20

well I'm just gonna undo that there there's somewhere else that I need to

1:34:26

update that though is that here

1:34:32

okay and then come back down into the header give that a save

1:34:40

okay

1:34:46

now let's change it to something I actually want

1:34:55

and there we go Okay cool so we've changed the name and we've changed the slug

1:35:00

um let me sign out sign up with a different person and let's test that flow one more time make sure that we got

1:35:06

everything working okay there so um test user one

1:35:18

all right we got redirected here um since we do have that new user query string we could add in some message

1:35:23

Barber right here and thinking about it so that is

1:35:32

um Pages teams edits

1:35:39

my brain got ahead of itself I was trying to think of what I would need to grab to get the params

1:35:45

let's see so we have at if

1:35:52

I feel like you have the route data I think that's a thing let me go ahead and just inspect route

1:35:59

so we get oh function yep oh yeah yeah yeah yeah

1:36:04

let's try request route undefined I know it's in there I know it's provided I can't remember how it's provided

1:36:11

let's take a look at the views and templates should be available in the globals or something of the sort here those are all the helpers

1:36:19

you get those I don't want to dig through the state

1:36:24

that's a mess to do that uh let's see we got the session flash route here we go

1:36:31

round options clear string yeah that's all for that function params

1:36:39

okay foreign

1:36:45

can't quite remember where so instead what I'm going to do is just

1:36:51

go up to the teams controller and we have it here

1:36:57

ah

1:37:04

yeah remembered it there we go that's what we want to do and then so we can do at if

1:37:15

um so I come back as an object yes it does very nice if

1:37:20

request Qs dot new user

1:37:30

um looks like we have alerts in here already let me see what the name of probably success oh I just put error in

1:37:36

here how fun let's go into our alert

1:37:44

yeah we can do this one copy that

1:37:51

alerts call that info put it in there

1:38:05

let's see if I kept that span on the air one that did okay we'll keep it true to

1:38:11

itself and put the spam back okay come back into here we can do at

1:38:18

alerts.info

1:38:27

Welcome to our changelog because I don't really have much to say right there for right now but there you go

1:38:38

and in the class name addition onto that as well so right here

1:38:45

last name and I probably didn't put it on there I did not

1:38:51

last name there we go cool so now we have Welcome to our change log

1:38:57

um

1:39:03

default team please

1:39:09

Bill three two update it as you wish I really don't

1:39:15

know I'm just spitballing so yeah let's just

1:39:21

that'll do for now um okay cool

1:39:29

so we have a little bit more going on here um in between now and the next stream I

1:39:36

will figure out what's up with the uh route model binding that I set up and

1:39:41

see why it's not quite working the way that I anticipated uh read through the actual documentation because I haven't

1:39:47

done that yet um so that's probably why it's not working for me so it's usually a good

1:39:52

indicator um and then yeah we'll continue on this with the next stream where we will start adding

1:39:58

in the ability to invite other people uh and all that fun stuff so thank you all for joining me with this live stream uh

1:40:06

thank you to those of you who posted your questions on the stream and I will see you all in our next lesson which

1:40:11

will be coming out on Sunday um it was meant for today but I stopped and re-edited the whole thing yesterday

1:40:17

and I wasn't quite done with it so I just had a little bit more that I need to do today um so it should be out Sunday at 9 00

1:40:24

a.m eastern time all right thank you all for watching and I'll see y'all later

Join The Discussion! (0 Comments)

Please sign in or sign up for free to join in on the dicussion.

robot comment bubble

Be the first to Comment!