14-cleanup #15
| @ -237,3 +237,11 @@ func (app *application) deleteGuestbookComment(w http.ResponseWriter, r *http.Re | |||||||
| 		app.serverError(w, r, err) | 		app.serverError(w, r, err) | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | func (app *application) getAllGuestbooks(w http.ResponseWriter, r *http.Request) { | ||||||
|  | 	websites, err := app.websites.GetAll() | ||||||
|  | 	if err != nil { | ||||||
|  | 		app.serverError(w, r, err) | ||||||
|  | 	} | ||||||
|  | 	views.AllGuestbooksView(app.newCommonData(r), websites).Render(r.Context(), w) | ||||||
|  | } | ||||||
|  | |||||||
| @ -82,7 +82,7 @@ func (app *application) getWebsiteDashboard(w http.ResponseWriter, r *http.Reque | |||||||
| func (app *application) getWebsiteList(w http.ResponseWriter, r *http.Request) { | func (app *application) getWebsiteList(w http.ResponseWriter, r *http.Request) { | ||||||
| 
 | 
 | ||||||
| 	userId := app.sessionManager.GetInt64(r.Context(), "authenticatedUserId") | 	userId := app.sessionManager.GetInt64(r.Context(), "authenticatedUserId") | ||||||
| 	websites, err := app.websites.GetAll(userId) | 	websites, err := app.websites.GetAllUser(userId) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		app.serverError(w, r, err) | 		app.serverError(w, r, err) | ||||||
| 		return | 		return | ||||||
|  | |||||||
| @ -30,6 +30,7 @@ func (app *application) routes() http.Handler { | |||||||
| 	mux.Handle("POST /users/logout", protected.ThenFunc(app.postUserLogout)) | 	mux.Handle("POST /users/logout", protected.ThenFunc(app.postUserLogout)) | ||||||
| 	mux.Handle("GET /users/settings", protected.ThenFunc(app.notImplemented)) | 	mux.Handle("GET /users/settings", protected.ThenFunc(app.notImplemented)) | ||||||
| 	mux.Handle("GET /users/privacy", protected.ThenFunc(app.notImplemented)) | 	mux.Handle("GET /users/privacy", protected.ThenFunc(app.notImplemented)) | ||||||
|  | 	mux.Handle("GET /guestbooks", protected.ThenFunc(app.getAllGuestbooks)) | ||||||
| 
 | 
 | ||||||
| 	mux.Handle("GET /websites", protected.ThenFunc(app.getWebsiteList)) | 	mux.Handle("GET /websites", protected.ThenFunc(app.getWebsiteList)) | ||||||
| 	mux.Handle("GET /websites/create", protected.ThenFunc(app.getWebsiteCreate)) | 	mux.Handle("GET /websites/create", protected.ThenFunc(app.getWebsiteCreate)) | ||||||
|  | |||||||
| @ -65,7 +65,7 @@ func (m *WebsiteModel) GetById(id int64) (Website, error) { | |||||||
| 	return w, nil | 	return w, nil | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func (m *WebsiteModel) GetAll(userId int64) ([]Website, error) { | func (m *WebsiteModel) GetAllUser(userId int64) ([]Website, error) { | ||||||
| 	stmt := `SELECT w.Id, w.ShortId, w.Name, w.SiteUrl, w.AuthorName, w.UserId, w.Created,  | 	stmt := `SELECT w.Id, w.ShortId, w.Name, w.SiteUrl, w.AuthorName, w.UserId, w.Created,  | ||||||
| 	g.Id, g.ShortId, g.Created, g.IsActive | 	g.Id, g.ShortId, g.Created, g.IsActive | ||||||
| 	FROM websites AS w INNER JOIN guestbooks AS g ON w.Id = g.WebsiteId | 	FROM websites AS w INNER JOIN guestbooks AS g ON w.Id = g.WebsiteId | ||||||
| @ -89,3 +89,27 @@ func (m *WebsiteModel) GetAll(userId int64) ([]Website, error) { | |||||||
| 	} | 	} | ||||||
| 	return websites, nil | 	return websites, nil | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | func (m *WebsiteModel) GetAll() ([]Website, error) { | ||||||
|  | 	stmt := `SELECT w.Id, w.ShortId, w.Name, w.SiteUrl, w.AuthorName, w.UserId, w.Created,  | ||||||
|  | 	g.Id, g.ShortId, g.Created, g.IsActive | ||||||
|  | 	FROM websites AS w INNER JOIN guestbooks AS g ON w.Id = g.WebsiteId` | ||||||
|  | 	rows, err := m.DB.Query(stmt) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return nil, err | ||||||
|  | 	} | ||||||
|  | 	var websites []Website | ||||||
|  | 	for rows.Next() { | ||||||
|  | 		var w Website | ||||||
|  | 		err := rows.Scan(&w.ID, &w.ShortId, &w.Name, &w.SiteUrl, &w.AuthorName, &w.UserId, &w.Created, | ||||||
|  | 			&w.Guestbook.ID, &w.Guestbook.ShortId, &w.Guestbook.Created, &w.Guestbook.IsActive) | ||||||
|  | 		if err != nil { | ||||||
|  | 			return nil, err | ||||||
|  | 		} | ||||||
|  | 		websites = append(websites, w) | ||||||
|  | 	} | ||||||
|  | 	if err = rows.Err(); err != nil { | ||||||
|  | 		return nil, err | ||||||
|  | 	} | ||||||
|  | 	return websites, nil | ||||||
|  | } | ||||||
|  | |||||||
| @ -36,6 +36,7 @@ templ topNav(data CommonData) { | |||||||
|         </div> |         </div> | ||||||
|         <div> |         <div> | ||||||
|             if data.IsAuthenticated { |             if data.IsAuthenticated { | ||||||
|  |                 <a href="/guestbooks">All Guestbooks</a> | | ||||||
|                 <a href="/websites">My Websites</a> |  |                 <a href="/websites">My Websites</a> |  | ||||||
|                 <a href="/users/settings">Settings</a> |  |                 <a href="/users/settings">Settings</a> |  | ||||||
|                 <form action="/users/logout" method="post"> |                 <form action="/users/logout" method="post"> | ||||||
|  | |||||||
| @ -103,14 +103,14 @@ func topNav(data CommonData) templ.Component { | |||||||
| 			return templ_7745c5c3_Err | 			return templ_7745c5c3_Err | ||||||
| 		} | 		} | ||||||
| 		if data.IsAuthenticated { | 		if data.IsAuthenticated { | ||||||
| 			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 5, "<a href=\"/websites\">My Websites</a> |  <a href=\"/users/settings\">Settings</a> | <form action=\"/users/logout\" method=\"post\"><input type=\"hidden\" name=\"csrf_token\" value=\"") | 			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 5, "<a href=\"/guestbooks\">All Guestbooks</a> | <a href=\"/websites\">My Websites</a> |  <a href=\"/users/settings\">Settings</a> | <form action=\"/users/logout\" method=\"post\"><input type=\"hidden\" name=\"csrf_token\" value=\"") | ||||||
| 			if templ_7745c5c3_Err != nil { | 			if templ_7745c5c3_Err != nil { | ||||||
| 				return templ_7745c5c3_Err | 				return templ_7745c5c3_Err | ||||||
| 			} | 			} | ||||||
| 			var templ_7745c5c3_Var4 string | 			var templ_7745c5c3_Var4 string | ||||||
| 			templ_7745c5c3_Var4, templ_7745c5c3_Err = templ.JoinStringErrs(data.CSRFToken) | 			templ_7745c5c3_Var4, templ_7745c5c3_Err = templ.JoinStringErrs(data.CSRFToken) | ||||||
| 			if templ_7745c5c3_Err != nil { | 			if templ_7745c5c3_Err != nil { | ||||||
| 				return templ.Error{Err: templ_7745c5c3_Err, FileName: `ui/views/common.templ`, Line: 42, Col: 81} | 				return templ.Error{Err: templ_7745c5c3_Err, FileName: `ui/views/common.templ`, Line: 43, Col: 81} | ||||||
| 			} | 			} | ||||||
| 			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var4)) | 			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var4)) | ||||||
| 			if templ_7745c5c3_Err != nil { | 			if templ_7745c5c3_Err != nil { | ||||||
| @ -191,7 +191,7 @@ func base(title string, data CommonData) templ.Component { | |||||||
| 		var templ_7745c5c3_Var7 string | 		var templ_7745c5c3_Var7 string | ||||||
| 		templ_7745c5c3_Var7, templ_7745c5c3_Err = templ.JoinStringErrs(title) | 		templ_7745c5c3_Var7, templ_7745c5c3_Err = templ.JoinStringErrs(title) | ||||||
| 		if templ_7745c5c3_Err != nil { | 		if templ_7745c5c3_Err != nil { | ||||||
| 			return templ.Error{Err: templ_7745c5c3_Err, FileName: `ui/views/common.templ`, Line: 65, Col: 26} | 			return templ.Error{Err: templ_7745c5c3_Err, FileName: `ui/views/common.templ`, Line: 66, Col: 26} | ||||||
| 		} | 		} | ||||||
| 		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var7)) | 		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var7)) | ||||||
| 		if templ_7745c5c3_Err != nil { | 		if templ_7745c5c3_Err != nil { | ||||||
| @ -221,7 +221,7 @@ func base(title string, data CommonData) templ.Component { | |||||||
| 			var templ_7745c5c3_Var8 string | 			var templ_7745c5c3_Var8 string | ||||||
| 			templ_7745c5c3_Var8, templ_7745c5c3_Err = templ.JoinStringErrs(data.Flash) | 			templ_7745c5c3_Var8, templ_7745c5c3_Err = templ.JoinStringErrs(data.Flash) | ||||||
| 			if templ_7745c5c3_Err != nil { | 			if templ_7745c5c3_Err != nil { | ||||||
| 				return templ.Error{Err: templ_7745c5c3_Err, FileName: `ui/views/common.templ`, Line: 76, Col: 51} | 				return templ.Error{Err: templ_7745c5c3_Err, FileName: `ui/views/common.templ`, Line: 77, Col: 51} | ||||||
| 			} | 			} | ||||||
| 			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var8)) | 			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var8)) | ||||||
| 			if templ_7745c5c3_Err != nil { | 			if templ_7745c5c3_Err != nil { | ||||||
|  | |||||||
| @ -2,7 +2,7 @@ | |||||||
| <nav><div> | <nav><div> | ||||||
| Welcome,  | Welcome,  | ||||||
| </div><div> | </div><div> | ||||||
| <a href=\"/websites\">My Websites</a> |  <a href=\"/users/settings\">Settings</a> | <form action=\"/users/logout\" method=\"post\"><input type=\"hidden\" name=\"csrf_token\" value=\" | <a href=\"/guestbooks\">All Guestbooks</a> | <a href=\"/websites\">My Websites</a> |  <a href=\"/users/settings\">Settings</a> | <form action=\"/users/logout\" method=\"post\"><input type=\"hidden\" name=\"csrf_token\" value=\" | ||||||
| \"> <button>Logout</button></form> | \"> <button>Logout</button></form> | ||||||
| <a href=\"/users/register\">Create an Account</a> |  <a href=\"/users/login\">Login</a> | <a href=\"/users/register\">Create an Account</a> |  <a href=\"/users/login\">Login</a> | ||||||
| </div></nav> | </div></nav> | ||||||
|  | |||||||
| @ -158,3 +158,22 @@ templ GuestbookDashboardCommentView(data CommonData, w models.Website, c models. | |||||||
|         </p> |         </p> | ||||||
|     </div> |     </div> | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | templ AllGuestbooksView(data CommonData, websites []models.Website) { | ||||||
|  |     @base("All Guestbooks", data) { | ||||||
|  |         <div> | ||||||
|  |             <h1>All Guestbooks</h1> | ||||||
|  |             <p> | ||||||
|  |                 This page exists only for testing the service. | ||||||
|  |             </p> | ||||||
|  |             <ul> | ||||||
|  |                 for _, w := range websites { | ||||||
|  |                     <li> | ||||||
|  |                         {{  gbUrl := fmt.Sprintf("/websites/%s/guestbook", shortIdToSlug(w.ShortId))}} | ||||||
|  |                         <a href={ templ.URL(gbUrl) } target="_blank">{ w.Name }</a> | ||||||
|  |                     </li> | ||||||
|  |                 } | ||||||
|  |             </ul> | ||||||
|  |         </div> | ||||||
|  |     } | ||||||
|  | } | ||||||
| @ -752,4 +752,88 @@ func GuestbookDashboardCommentView(data CommonData, w models.Website, c models.G | |||||||
| 	}) | 	}) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | func AllGuestbooksView(data CommonData, websites []models.Website) templ.Component { | ||||||
|  | 	return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { | ||||||
|  | 		templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context | ||||||
|  | 		if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil { | ||||||
|  | 			return templ_7745c5c3_CtxErr | ||||||
|  | 		} | ||||||
|  | 		templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) | ||||||
|  | 		if !templ_7745c5c3_IsBuffer { | ||||||
|  | 			defer func() { | ||||||
|  | 				templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer) | ||||||
|  | 				if templ_7745c5c3_Err == nil { | ||||||
|  | 					templ_7745c5c3_Err = templ_7745c5c3_BufErr | ||||||
|  | 				} | ||||||
|  | 			}() | ||||||
|  | 		} | ||||||
|  | 		ctx = templ.InitializeContext(ctx) | ||||||
|  | 		templ_7745c5c3_Var36 := templ.GetChildren(ctx) | ||||||
|  | 		if templ_7745c5c3_Var36 == nil { | ||||||
|  | 			templ_7745c5c3_Var36 = templ.NopComponent | ||||||
|  | 		} | ||||||
|  | 		ctx = templ.ClearChildren(ctx) | ||||||
|  | 		templ_7745c5c3_Var37 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { | ||||||
|  | 			templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context | ||||||
|  | 			templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) | ||||||
|  | 			if !templ_7745c5c3_IsBuffer { | ||||||
|  | 				defer func() { | ||||||
|  | 					templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer) | ||||||
|  | 					if templ_7745c5c3_Err == nil { | ||||||
|  | 						templ_7745c5c3_Err = templ_7745c5c3_BufErr | ||||||
|  | 					} | ||||||
|  | 				}() | ||||||
|  | 			} | ||||||
|  | 			ctx = templ.InitializeContext(ctx) | ||||||
|  | 			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 56, "<div><h1>All Guestbooks</h1><p>This page exists only for testing the service.</p><ul>") | ||||||
|  | 			if templ_7745c5c3_Err != nil { | ||||||
|  | 				return templ_7745c5c3_Err | ||||||
|  | 			} | ||||||
|  | 			for _, w := range websites { | ||||||
|  | 				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 57, "<li>") | ||||||
|  | 				if templ_7745c5c3_Err != nil { | ||||||
|  | 					return templ_7745c5c3_Err | ||||||
|  | 				} | ||||||
|  | 				gbUrl := fmt.Sprintf("/websites/%s/guestbook", shortIdToSlug(w.ShortId)) | ||||||
|  | 				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 58, "<a href=\"") | ||||||
|  | 				if templ_7745c5c3_Err != nil { | ||||||
|  | 					return templ_7745c5c3_Err | ||||||
|  | 				} | ||||||
|  | 				var templ_7745c5c3_Var38 templ.SafeURL = templ.URL(gbUrl) | ||||||
|  | 				_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(string(templ_7745c5c3_Var38))) | ||||||
|  | 				if templ_7745c5c3_Err != nil { | ||||||
|  | 					return templ_7745c5c3_Err | ||||||
|  | 				} | ||||||
|  | 				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 59, "\" target=\"_blank\">") | ||||||
|  | 				if templ_7745c5c3_Err != nil { | ||||||
|  | 					return templ_7745c5c3_Err | ||||||
|  | 				} | ||||||
|  | 				var templ_7745c5c3_Var39 string | ||||||
|  | 				templ_7745c5c3_Var39, templ_7745c5c3_Err = templ.JoinStringErrs(w.Name) | ||||||
|  | 				if templ_7745c5c3_Err != nil { | ||||||
|  | 					return templ.Error{Err: templ_7745c5c3_Err, FileName: `ui/views/guestbooks.templ`, Line: 173, Col: 77} | ||||||
|  | 				} | ||||||
|  | 				_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var39)) | ||||||
|  | 				if templ_7745c5c3_Err != nil { | ||||||
|  | 					return templ_7745c5c3_Err | ||||||
|  | 				} | ||||||
|  | 				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 60, "</a></li>") | ||||||
|  | 				if templ_7745c5c3_Err != nil { | ||||||
|  | 					return templ_7745c5c3_Err | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 61, "</ul></div>") | ||||||
|  | 			if templ_7745c5c3_Err != nil { | ||||||
|  | 				return templ_7745c5c3_Err | ||||||
|  | 			} | ||||||
|  | 			return nil | ||||||
|  | 		}) | ||||||
|  | 		templ_7745c5c3_Err = base("All Guestbooks", data).Render(templ.WithChildren(ctx, templ_7745c5c3_Var37), templ_7745c5c3_Buffer) | ||||||
|  | 		if templ_7745c5c3_Err != nil { | ||||||
|  | 			return templ_7745c5c3_Err | ||||||
|  | 		} | ||||||
|  | 		return nil | ||||||
|  | 	}) | ||||||
|  | } | ||||||
|  | 
 | ||||||
| var _ = templruntime.GeneratedTemplate | var _ = templruntime.GeneratedTemplate | ||||||
|  | |||||||
| @ -53,3 +53,9 @@ Hide | |||||||
| </a> | </a> | ||||||
| <p> | <p> | ||||||
| </p></div> | </p></div> | ||||||
|  | <div><h1>All Guestbooks</h1><p>This page exists only for testing the service.</p><ul> | ||||||
|  | <li> | ||||||
|  | <a href=\" | ||||||
|  | \" target=\"_blank\"> | ||||||
|  | </a></li> | ||||||
|  | </ul></div> | ||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user