Better error handling, fix some more broken OG links

This commit is contained in:
Geometrically
2021-01-01 09:09:53 -07:00
parent 9de5950f4d
commit a0b6a3bed6
10 changed files with 298 additions and 241 deletions

View File

@@ -1,15 +1,25 @@
<template> <template>
<div class="main"> <div class="main">
<h1>{{ error.message }}</h1> <div class="container">
<NuxtLink to="/"> <NuxtLink to="/">
An error occurred! Click this text to go back home, and find your way <h2>{{ error.message }}</h2>
back! <p>
</NuxtLink> An error occurred! Click this text to go back home, and find your way
back!
</p>
</NuxtLink>
</div>
<m-footer class="footer" centered />
</div> </div>
</template> </template>
<script> <script>
import MFooter from '@/components/MFooter'
export default { export default {
components: {
MFooter,
},
props: { props: {
error: { error: {
type: Object, type: Object,
@@ -29,8 +39,12 @@ export default {
<style lang="scss" scoped> <style lang="scss" scoped>
.main { .main {
margin: 0 auto; margin: var(--spacing-card-sm) auto;
max-width: 800px; max-width: 800px;
text-align: center; }
.container {
@extend %card;
padding: var(--spacing-card-md) var(--spacing-card-lg);
} }
</style> </style>

View File

@@ -25,7 +25,6 @@
<div class="right hero-image"> <div class="right hero-image">
<video <video
src="~/assets/images/search.mp4" src="~/assets/images/search.mp4"
alt="search"
loading="lazy" loading="lazy"
loop loop
muted muted

View File

@@ -171,7 +171,7 @@ export default {
{ {
hid: 'og:url', hid: 'og:url',
name: 'og:url', name: 'og:url',
content: `https://modrinth.com/privacy`, content: `https://modrinth.com/legal/privacy`,
}, },
], ],
}, },

View File

@@ -183,7 +183,7 @@ export default {
{ {
hid: 'og:url', hid: 'og:url',
name: 'og:url', name: 'og:url',
content: `https://modrinth.com/tos`, content: `https://modrinth.com/legal/terms`,
}, },
], ],
}, },

View File

@@ -282,55 +282,62 @@ export default {
}, },
} }
const [ try {
mod, const [
availableCategories, mod,
availableLoaders, availableCategories,
availableGameVersions, availableLoaders,
availableLicenses, availableGameVersions,
// availableDonationPlatforms, availableLicenses,
] = ( // availableDonationPlatforms,
await Promise.all([ ] = (
axios.get( await Promise.all([
`https://api.modrinth.com/api/v1/mod/${data.params.id}`, axios.get(
config `https://api.modrinth.com/api/v1/mod/${data.params.id}`,
), config
axios.get(`https://api.modrinth.com/api/v1/tag/category`), ),
axios.get(`https://api.modrinth.com/api/v1/tag/loader`), axios.get(`https://api.modrinth.com/api/v1/tag/category`),
axios.get(`https://api.modrinth.com/api/v1/tag/game_version`), axios.get(`https://api.modrinth.com/api/v1/tag/loader`),
axios.get(`https://api.modrinth.com/api/v1/tag/license`), axios.get(`https://api.modrinth.com/api/v1/tag/game_version`),
// axios.get(`https://api.modrinth.com/api/v1/tag/donation_platform`), axios.get(`https://api.modrinth.com/api/v1/tag/license`),
]) // axios.get(`https://api.modrinth.com/api/v1/tag/donation_platform`),
).map((it) => it.data) ])
).map((it) => it.data)
mod.license = { mod.license = {
short: mod.license.id,
name: mod.license.name,
}
const res = await axios.get(mod.body_url)
return {
mod,
body: res.data,
clientSideType: {
label: mod.client_side,
id: mod.client_side,
},
serverSideType: {
label: mod.server_side,
id: mod.server_side,
},
availableCategories,
availableLoaders,
availableGameVersions,
availableLicenses,
license: {
short: mod.license.id, short: mod.license.id,
name: mod.license.name, name: mod.license.name,
}, }
license_url: mod.license.url,
// availableDonationPlatforms, const res = await axios.get(mod.body_url)
return {
mod,
body: res.data,
clientSideType: {
label: mod.client_side,
id: mod.client_side,
},
serverSideType: {
label: mod.server_side,
id: mod.server_side,
},
availableCategories,
availableLoaders,
availableGameVersions,
availableLicenses,
license: {
short: mod.license.id,
name: mod.license.name,
},
license_url: mod.license.url,
// availableDonationPlatforms,
}
} catch {
data.error({
statusCode: 404,
message: 'Mod not found',
})
} }
}, },
data() { data() {

View File

@@ -28,49 +28,56 @@ export default {
}, },
} }
const mod = ( try {
await axios.get( const mod = (
`https://api.modrinth.com/api/v1/mod/${data.params.id}`, await axios.get(
config `https://api.modrinth.com/api/v1/mod/${data.params.id}`,
) config
).data )
).data
const [members, versions] = ( const [members, versions] = (
await Promise.all([ await Promise.all([
axios.get(`https://api.modrinth.com/api/v1/team/${mod.team}/members`), axios.get(`https://api.modrinth.com/api/v1/team/${mod.team}/members`),
axios.get( axios.get(
`https://api.modrinth.com/api/v1/versions?ids=${JSON.stringify( `https://api.modrinth.com/api/v1/versions?ids=${JSON.stringify(
mod.versions mod.versions
)}`,
config
),
])
).map((it) => it.data)
const users = (
await axios.get(
`https://api.modrinth.com/api/v1/users?ids=${JSON.stringify(
members.map((it) => it.user_id)
)}`, )}`,
config config
), )
]) ).data
).map((it) => it.data)
const users = ( users.forEach((it) => {
await axios.get( const index = members.findIndex((x) => x.user_id === it.id)
`https://api.modrinth.com/api/v1/users?ids=${JSON.stringify( members[index].avatar_url = it.avatar_url
members.map((it) => it.user_id) members[index].name = it.username
)}`, })
config
)
).data
users.forEach((it) => { const currentMember = data.$auth.loggedIn
const index = members.findIndex((x) => x.user_id === it.id) ? members.find((x) => x.user_id === data.$auth.user.id)
members[index].avatar_url = it.avatar_url : null
members[index].name = it.username
})
const currentMember = data.$auth.loggedIn return {
? members.find((x) => x.user_id === data.$auth.user.id) mod,
: null versions: versions.reverse(),
members,
return { currentMember,
mod, }
versions: versions.reverse(), } catch {
members, data.error({
currentMember, statusCode: 404,
message: 'Mod not found',
})
} }
}, },
data() { data() {

View File

@@ -219,54 +219,61 @@ export default {
}, },
} }
const mod = ( try {
await axios.get( const mod = (
`https://api.modrinth.com/api/v1/mod/${data.params.id}`, await axios.get(
config `https://api.modrinth.com/api/v1/mod/${data.params.id}`,
)
).data
const [members, versions] = (
await Promise.all([
axios.get(
`https://api.modrinth.com/api/v1/team/${mod.team}/members`,
config config
), )
axios.get( ).data
`https://api.modrinth.com/api/v1/versions?ids=${JSON.stringify(
mod.versions
)}`,
config
),
])
).map((it) => it.data)
const [users] = ( const [members, versions] = (
await Promise.all([ await Promise.all([
axios.get( axios.get(
`https://api.modrinth.com/api/v1/users?ids=${JSON.stringify( `https://api.modrinth.com/api/v1/team/${mod.team}/members`,
members.map((it) => it.user_id) config
)}`, ),
config axios.get(
), `https://api.modrinth.com/api/v1/versions?ids=${JSON.stringify(
]) mod.versions
).map((it) => it.data) )}`,
config
),
])
).map((it) => it.data)
users.forEach((it) => { const [users] = (
const index = members.findIndex((x) => x.user_id === it.id) await Promise.all([
members[index].avatar_url = it.avatar_url axios.get(
members[index].name = it.username `https://api.modrinth.com/api/v1/users?ids=${JSON.stringify(
}) members.map((it) => it.user_id)
)}`,
config
),
])
).map((it) => it.data)
const currentMember = data.$auth.loggedIn users.forEach((it) => {
? members.find((x) => x.user_id === data.$auth.user.id) const index = members.findIndex((x) => x.user_id === it.id)
: null members[index].avatar_url = it.avatar_url
members[index].name = it.username
})
return { const currentMember = data.$auth.loggedIn
mod, ? members.find((x) => x.user_id === data.$auth.user.id)
versions: versions.reverse(), : null
members,
currentMember, return {
mod,
versions: versions.reverse(),
members,
currentMember,
}
} catch {
data.error({
statusCode: 404,
message: 'Mod not found',
})
} }
}, },
data() { data() {

View File

@@ -126,61 +126,68 @@ export default {
}, },
} }
const mod = ( try {
await axios.get( const mod = (
`https://api.modrinth.com/api/v1/mod/${data.params.id}`, await axios.get(
config `https://api.modrinth.com/api/v1/mod/${data.params.id}`,
) config
).data )
).data
const [members, versions] = ( const [members, versions] = (
await Promise.all([ await Promise.all([
axios.get(`https://api.modrinth.com/api/v1/team/${mod.team}/members`), axios.get(`https://api.modrinth.com/api/v1/team/${mod.team}/members`),
axios.get( axios.get(
`https://api.modrinth.com/api/v1/versions?ids=${JSON.stringify( `https://api.modrinth.com/api/v1/versions?ids=${JSON.stringify(
mod.versions mod.versions
)}`,
config
),
])
).map((it) => it.data)
const users = (
await axios.get(
`https://api.modrinth.com/api/v1/users?ids=${JSON.stringify(
members.map((it) => it.user_id)
)}`, )}`,
config config
), )
]) ).data
).map((it) => it.data)
const users = ( users.forEach((it) => {
await axios.get( const index = members.findIndex((x) => x.user_id === it.id)
`https://api.modrinth.com/api/v1/users?ids=${JSON.stringify( members[index].avatar_url = it.avatar_url
members.map((it) => it.user_id) members[index].name = it.username
)}`, })
config
)
).data
users.forEach((it) => { const version = versions.find((x) => x.id === data.params.version)
const index = members.findIndex((x) => x.user_id === it.id)
members[index].avatar_url = it.avatar_url
members[index].name = it.username
})
const version = versions.find((x) => x.id === data.params.version) version.author = members.find((x) => x.user_id === version.author_id)
version.author = members.find((x) => x.user_id === version.author_id) let primaryFile = version.files.find((file) => file.primary)
let primaryFile = version.files.find((file) => file.primary) if (!primaryFile) {
primaryFile = version.files[0]
}
if (!primaryFile) { const currentMember = data.$auth.loggedIn
primaryFile = version.files[0] ? members.find((x) => x.user_id === data.$auth.user.id)
} : null
const currentMember = data.$auth.loggedIn return {
? members.find((x) => x.user_id === data.$auth.user.id) mod,
: null versions,
members,
return { version,
mod, primaryFile,
versions, currentMember,
members, }
version, } catch {
primaryFile, data.error({
currentMember, statusCode: 404,
message: 'Version not found',
})
} }
}, },
data() { data() {

View File

@@ -232,53 +232,60 @@ export default {
}, },
} }
const mod = ( try {
await axios.get( const mod = (
`https://api.modrinth.com/api/v1/mod/${data.params.id}`, await axios.get(
config `https://api.modrinth.com/api/v1/mod/${data.params.id}`,
) config
).data )
).data
const [members, versions, selectableLoaders, selectableVersions] = ( const [members, versions, selectableLoaders, selectableVersions] = (
await Promise.all([ await Promise.all([
axios.get(`https://api.modrinth.com/api/v1/team/${mod.team}/members`), axios.get(`https://api.modrinth.com/api/v1/team/${mod.team}/members`),
axios.get( axios.get(
`https://api.modrinth.com/api/v1/versions?ids=${JSON.stringify( `https://api.modrinth.com/api/v1/versions?ids=${JSON.stringify(
mod.versions mod.versions
)}`,
config
),
axios.get(`https://api.modrinth.com/api/v1/tag/loader`),
axios.get(`https://api.modrinth.com/api/v1/tag/game_version`),
])
).map((it) => it.data)
const users = (
await axios.get(
`https://api.modrinth.com/api/v1/users?ids=${JSON.stringify(
members.map((it) => it.user_id)
)}`, )}`,
config config
), )
axios.get(`https://api.modrinth.com/api/v1/tag/loader`), ).data
axios.get(`https://api.modrinth.com/api/v1/tag/game_version`),
])
).map((it) => it.data)
const users = ( users.forEach((it) => {
await axios.get( const index = members.findIndex((x) => x.user_id === it.id)
`https://api.modrinth.com/api/v1/users?ids=${JSON.stringify( members[index].avatar_url = it.avatar_url
members.map((it) => it.user_id) members[index].name = it.username
)}`, })
config
)
).data
users.forEach((it) => { const currentMember = data.$auth.loggedIn
const index = members.findIndex((x) => x.user_id === it.id) ? members.find((x) => x.user_id === data.$auth.user.id)
members[index].avatar_url = it.avatar_url : null
members[index].name = it.username
})
const currentMember = data.$auth.loggedIn return {
? members.find((x) => x.user_id === data.$auth.user.id) mod,
: null versions: versions.reverse(),
members,
return { selectableLoaders,
mod, selectableVersions,
versions: versions.reverse(), currentMember,
members, }
selectableLoaders, } catch {
selectableVersions, data.error({
currentMember, statusCode: 404,
message: 'Mod not found',
})
} }
}, },
data() { data() {

View File

@@ -99,28 +99,37 @@ export default {
}, },
} }
let res = await axios.get( try {
`https://api.modrinth.com/api/v1/user/${data.params.id}`, let res = await axios.get(
config `https://api.modrinth.com/api/v1/user/${data.params.id}`,
)
const user = res.data
let mods = []
res = await axios.get(
`https://api.modrinth.com/api/v1/user/${data.params.id}/mods`,
config
)
if (res.data) {
res = await axios.get(
`https://api.modrinth.com/api/v1/mods?ids=${JSON.stringify(res.data)}`,
config config
) )
mods = res.data const user = res.data
}
return { let mods = []
mods, res = await axios.get(
user, `https://api.modrinth.com/api/v1/user/${data.params.id}/mods`,
config
)
if (res.data) {
res = await axios.get(
`https://api.modrinth.com/api/v1/mods?ids=${JSON.stringify(
res.data
)}`,
config
)
mods = res.data
}
return {
mods,
user,
}
} catch {
data.error({
statusCode: 404,
message: 'User not found',
})
} }
}, },
methods: { methods: {